01_HTTP協議

前言

當前大部分的應用都是基於B/S架構的,而這其中主流的是基於http通信協議的。所以對於一個web開發者來說,http協議的重要性不言而喻。

1. 概述

HTTP協議是一種被大多數web應用程序所使用的的協議

  • HTTP 數據的收發是基於TCP/IP協議的
  • HTTP 數據主要是文本,雖然請求體中的中的數據可以是二進制的

兩個步驟

  • 請求: 客戶機向服務器請求文檔。“文檔”可以是任何類型的文件。
  • 響應: 服務器用請求的文檔(或備用響應)響應客戶機請求。

其整個知識點如下:
在這裏插入圖片描述

HTTP協議是web應用開發的基石

2. http請求與http響應

2.1 http請求

一個HTTP請求是純文本內容的。它包含三個部分請求行、請求頭、請求體
請求行:這個是http請求的第一行,整個請求行又分爲三部分:URL,方法,版本

  • URL:代表請求的文檔
  • 方法:有put, get, delete, head, options, post, tract, connect
  • 版本:該http請求使用http協議版本,一般有HTTP/1.0 或者 HTTP/1.1

請求頭:允許額外信息的可選行。每一行都是名稱-值對

空行:用於將正文與標題分開

請求體:可選字節(一般用來承擔業務數據).

2.2 http響應

一個HTTP響應也是由文本行組成
狀態行: 第一行,由三個空格分隔的元素組成。.

  • 版本: 響應的HTTP版本
  • 狀態碼: 一個三位數代碼
  • 描述: 狀態碼的文本描述

響應頭:允許在客戶機和服務器之間交換數據的可選行。

響應體: 必須用空行與標題分隔的可選行

3. URL(scheme:[//[user:password@]host[:port]][/]path[?query][#fragment])

我們可以把因特網當做一個巨大的,正在擴張的城市。這個城市中所有的東西都應該有一個標準化的名字,以幫助人們能夠很塊的找到這個城市中的各種資源。當城市中的所有東西都認同並服從這個標準後,大家才能很方便的共享這座城市的資源了。

比如你需要你的朋友A幫你獲取到位於xxx大道xxx街的xxx圖書館中二樓計算機室的xxx書架上的xxx書(標準化的名字)的時候。你的朋友A立即就知道你是什麼意思了。

而URL就是因特網上的資源的標準化名稱。

URL是統一資源定位符的縮寫。它是一個具有特殊含義的字符串,其格式如下
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
可以看到整個URL分爲以下七個部分

  1. scheme 指定該請求使用協議
  2. user:password 驗證用戶名和密碼,由於安全原因,現在大多數系統已經不再支持這個了。
  3. host:需要請求的目標主機
  4. port:目標主機的端口
  5. path:目標資源在目標主機上的位置
  6. ?query:查詢信息
  7. #fragment:錨點定位

3.1 協議(scheme)

  • 定義了URL餘下部分的名稱空間、用途和語法
  • 不區分大小寫

比如你在瀏覽器地址欄中鍵入http://example.org:80,瀏覽器就會通過80端口向主機example.org發送HTTP請求。

如果你在瀏覽器地址欄中鍵入mailto:[email protected],那麼瀏覽器就會向[email protected]發送郵件來執行你的指令

再比如你在瀏覽器中鍵入ftp://IP/Download/,那麼你的瀏覽器就可以通過ftp協議獲取到這個ip指向服務器的資源。

3.2 主機(host)與端口(port)

URL的目標位置,相當於前面的拿書的那個例子中圖書館的位置信息(位於xxx大道xxx街的xxx圖書館)。

這一段字符串的作用是通過它能準確定位到因特網中某臺主機。

host字段有兩種:ip和域名
域名是ip地址的替代,瀏覽器會通過使用DNS來獲取域名對應的IP地址。
IPV4: 32比特(4組,每組8比特)
IPV6: 128 比特

表示如果省略將接收請求的服務器應用程序,則使用特定於方案的默認值.
3000: HTTP Nodejs server
8080: HTTP Tomcat server
22: Secure Shell (SSH)
80: HTTP default
443: HTTP Secure (HTTPS)

3.3 路徑(path)、查詢字符串(?query)、錨點(#fragment)

路徑:
資源的位置。相當於前面拿書的例子中圖書在圖書館中的位置信息(二樓計算機室的xxx書架上的xxx書)
該字段區分大小寫(有些服務器不區分大小寫).

查詢字符串:
還是用拿書的例子來說,比如需要的書有很多種版本(第一版、第二版之類的)。所以在後面加上一些信息(版本爲第五版,封面爲白色的)。
以?起頭,後面跟上鍵值對,多個鍵值對之間以&符號區別。
舉個例子

https://www.baidu.com/s?wd=htttp協議片段&rsv_spt=1&rsv_iqid=0xf5310479000d154e&issp=1&f=8&rsv_bp=1&rsv_idx=2

後邊wd=htttp協議片段&rsv_spt=1&rsv_iqid=0xf5310479000d154e&issp=1&f=8&rsv_bp=1&rsv_idx=2就是查詢字段。

錨點
拿前面的拿書的例子來說,如果我需要的東西只是書中的某一段怎麼辦,按道理是可以放在查詢字段中的,但是它與普通查詢字段有不一樣,因爲這時候書(資源)已經找到了。所以可以在後面在加上一個字段,專門用來定位的。

例子:
一個比較常見的例子就是百度百科最右邊的目錄
在這裏插入圖片描述

4. Http請求頭

由於不能將所有的信息放在請求行中,那樣會讓請求行顯得十分冗長。所以開闢一個空間用來攜帶額外的信息,那麼這個空間就是http請求頭。就我目前對http協議的理解,http請求頭中的信息是用來描述本次請求以及期待響應的信息,並不涉及業務功能。比如Accept就是向服務器表明瀏覽器可以接受的文本類型。

由於是用來描述請求與期待響應的,所以請求頭中信息的組織形式爲鍵-值。

請求頭中常用的鍵以及其意義

含義
Accept 瀏覽器可以接受的文本類型
Accept-Charset 瀏覽器需要的字符集(接觸比較少)
Accept-Encoding 瀏覽器接受的字符編碼
Accept-Language 瀏覽器接受的語言
Content-Length 請求正文的長度
Content-Type 請求正文的類型,文本、html等等
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章