原文:http://www.steves-internet-guide.com/http-basics/
了解 HTTP 基礎(chǔ)知識(shí)
HTTP 超文本傳輸協(xié)議,用于 Web 傳輸數(shù)據(jù)。
它是 Web 開發(fā)的關(guān)鍵協(xié)議,并且由于廣泛使用,還用于在 IOT 應(yīng)用程序中傳輸數(shù)據(jù)和命令。
http協(xié)議的第一個(gè)版本只有一個(gè)方法,即 GET,它將從服務(wù)器請(qǐng)求頁面。
服務(wù)器的響應(yīng)始終是 HTML 頁面。- Wiki
想要了解 HTTP 協(xié)議開始時(shí)的簡單程度,可以查看只有 1 頁的原始規(guī)范。
從最初的0.9 版本開始,已經(jīng)有多個(gè) HTTP版本。
當(dāng)前版本為 1.1,最后一次修訂是在 2014 年。有關(guān)詳細(xì)信息,請(qǐng)參閱Wiki。
工作機(jī)理
與大多數(shù) Internet 協(xié)議http一樣,它是使用客戶端服務(wù)器通信模型的基于命令和響應(yīng) 文本的協(xié)議。

客戶端發(fā)出請(qǐng)求,服務(wù)器響應(yīng)。
HTTP 協(xié)議也是一種無狀態(tài)協(xié)議,這意味著服務(wù)器不需要存儲(chǔ)會(huì)話信息,并且每個(gè)請(qǐng)求彼此獨(dú)立。- 請(qǐng)參閱此wiki
這表示:
- 所有請(qǐng)求都來自客戶端(您的瀏覽器)
- 服務(wù)器響應(yīng)請(qǐng)求。
- 請(qǐng)求(命令)和響應(yīng)是可讀的文本。
- 請(qǐng)求是相互獨(dú)立的,服務(wù)器不需要跟蹤請(qǐng)求。
請(qǐng)求和響應(yīng)結(jié)構(gòu)
請(qǐng)求和響應(yīng)消息結(jié)構(gòu)相同,如下圖所示:

請(qǐng)求包括:
命令或請(qǐng)求+可選標(biāo)頭+可選正文內(nèi)容。
響應(yīng)包括:
狀態(tài)碼+可選標(biāo)題+可選正文內(nèi)容。
一個(gè)簡單的CRLF(回車和換行)組合用于分隔部分,單個(gè)空行 ( CRLF ) 表示標(biāo)題的結(jié)尾。
如果請(qǐng)求或響應(yīng)包含消息正文,則在標(biāo)頭中指明。
請(qǐng)求中是否存在消息正文由Content-Length或Transfer-Encoding標(biāo)頭字段表示。請(qǐng)求消息框架獨(dú)立于方法語義,即使該方法沒有定義消息體的任何用途。– RFC 7230第 3.3 節(jié)。
注意:消息正文后面沒有 CRLF 請(qǐng)參閱RFC 7230第 3.5 節(jié)**
HTTP 請(qǐng)求
之前看到了一般的請(qǐng)求響應(yīng)格式,下面將更詳細(xì)地介紹請(qǐng)求消息。
起跑線是強(qiáng)制性的,其結(jié)構(gòu)如下:
方法+資源路徑+協(xié)議版本
例如,如果我們嘗試訪問 www.testsite5.com 上的網(wǎng)頁 testpage.htm
請(qǐng)求的起始行是: GET /test.htm HTTP/1.1
- GET是方法
- /testpage.htm是資源的相對(duì)路徑。
- HTTP/1.1是我們使用的協(xié)議版本
注意:
- 相對(duì)路徑不包括域名。
- Web 瀏覽器使用我們輸入的 URL 來創(chuàng)建資源的相對(duì) URI。
注意: URL(統(tǒng)一資源定位器)用于網(wǎng)頁。它是URI(統(tǒng)一資源指示符)的一個(gè)示例。
http包可以用解析工具如wireshark抓取或者chrome開發(fā)者工具 netrwork分析中可以查看
HTTP 與 URL
大多數(shù)人都熟悉在網(wǎng)絡(luò)瀏覽器中輸入網(wǎng)址。通??雌饋硐襁@樣。

url 還可以包含通常被瀏覽器隱藏的端口,但您可以手動(dòng)包含它,如下所示:

這告訴 Web 瀏覽器要定位的資源的地址以及用于檢索該資源的協(xié)議(http)。
http是將資源(網(wǎng)頁、圖像、視頻等)從服務(wù)器傳輸?shù)娇蛻舳说膫鬏攨f(xié)議。
HTTP響應(yīng)和響應(yīng)代碼
每個(gè)請(qǐng)求都有一個(gè)響應(yīng)。響應(yīng)包括
- 狀態(tài)碼和說明
- 1 個(gè)或多個(gè)可選標(biāo)題
- 可選的消息體(消息體可能有多行二進(jìn)制數(shù)據(jù)流)
響應(yīng)狀態(tài)代碼分為 5 組,每組有一個(gè)含義和一個(gè)三位數(shù)代碼。
- 1xx – 信息
- 2xx – 成功
- 3xx - 多項(xiàng)選擇
- 4xx – 客戶端錯(cuò)誤
- 5xx - 服務(wù)器錯(cuò)誤
例如,成功的頁面請(qǐng)求將返回200響應(yīng)代碼和不成功的400響應(yīng)代碼。
可以在此處找到完整列表及其含義
請(qǐng)求響應(yīng)示例
當(dāng)我們?cè)L問一個(gè)簡單的網(wǎng)頁(testpage.htm)時(shí),我們將檢查他的請(qǐng)求和響應(yīng)
這是我在瀏覽器地址欄中輸入的內(nèi)容:

這是瀏覽器顯示的響應(yīng):

這是幕后發(fā)生的http請(qǐng)求響應(yīng)的屏幕截圖。

請(qǐng)注意,請(qǐng)求標(biāo)頭是由瀏覽器自動(dòng)插入的,響應(yīng)標(biāo)頭也是由 Web 服務(wù)器插入的。
請(qǐng)求中沒有正文內(nèi)容?;貜?fù)中的正文內(nèi)容是一個(gè)網(wǎng)頁,并顯示在瀏覽器中,而不是由實(shí)時(shí)標(biāo)題工具顯示。
請(qǐng)求類型
到目前為止,我們還沒有提到請(qǐng)求類型,但我們已經(jīng)在示例中看到了 GET 請(qǐng)求類型。
GET 請(qǐng)求類型或方法用于從 Web 服務(wù)器請(qǐng)求資源。
GET 是最常用的請(qǐng)求類型,也是原始 HTTP 規(guī)范中唯一的請(qǐng)求類型。
請(qǐng)求類型、方法
HTTP 協(xié)議現(xiàn)在支持 8 種請(qǐng)求類型,在文檔中也稱為方法或動(dòng)詞,它們是:
- GET - 從服務(wù)器請(qǐng)求資源
- POST – 向服務(wù)器提交資源(例如文件上傳)
- PUT -As POST 但替換資源
- DELETE - 從服務(wù)器中刪除資源
- HEAD - 作為 GET 但只返回標(biāo)題而不是內(nèi)容
- OPTIONS - 獲取資源的選項(xiàng)
- PATCH - 對(duì)資源應(yīng)用修改
- TRACE - 執(zhí)行消息環(huán)回
在當(dāng)今的 Internet 上,GET(獲取網(wǎng)頁)和POST(提交 Web 表單)方法是最常用的方法。
其他方法用于處理 Web 和 IOT API,特別是 put、delete 和 head。