圖解HTTP協(xié)議摘要(春水版):第二章 簡(jiǎn)單的HTTP協(xié)議

關(guān)于圖解HTTP協(xié)議摘要,全部?jī)?nèi)容上傳到本人的Github,歡迎fork。

2.0 目錄

2.1 客戶端和服務(wù)端之間的通信
2.2 通過(guò)請(qǐng)求和響應(yīng)的交換達(dá)成通信
2.3 HTTP是不保存狀態(tài)的協(xié)議
2.4 請(qǐng)求URI定位資源
2.5 與服務(wù)端交互的方法
2.6 HTTP/1.1支持的方法
2.7 持久連接節(jié)省通信量
2.8 cookie

2.1 客戶端和服務(wù)端之間的通信

HTTP協(xié)議是基于客戶端和服務(wù)端之間的通信

2.2 通過(guò)請(qǐng)求和響應(yīng)的交換達(dá)成通信

請(qǐng)求必定是從客戶端發(fā)出,服務(wù)端響應(yīng)請(qǐng)求并返回。HTTP協(xié)議不支持雙向通信,WebSocket協(xié)議支持。

客戶端請(qǐng)求報(bào)文:

POST /form/entry HTTP/1.1
Host: example.com
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 16
name=ueno&age=37

服務(wù)端響應(yīng)報(bào)文:

HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html

<html>
...

2.3 HTTP是不保存狀態(tài)的協(xié)議

HTTP協(xié)議自身不保存請(qǐng)求和相應(yīng)之間的通信狀態(tài)??梢允褂胏ookie來(lái)保存狀態(tài)信息。

2.4 請(qǐng)求URI定位資源

URI可以定位互聯(lián)網(wǎng)上的所有資源。

GET /index.html HTTP/1.1
Host: example.com

2.5 與服務(wù)端交互的方法

  • GET:訪問(wèn)已經(jīng)被URI識(shí)別的資源,指定的資源被解析之后,返回響應(yīng)的內(nèi)容。
GET /index.html HTTP/1.1
Host: example.com
-------------------------
返回index.html的頁(yè)面資源

GET /index.html HTTP/1.1
Host: example.com
If-Modified-Since: Thu, 12 Jul 2012 07:30:00 GMT
-------------------------------------------------------
僅返回2012年7月12日07:30:00以后更新過(guò)的index.html的頁(yè)面資源
如果沒(méi)有內(nèi)容更新,返回狀態(tài)碼 304 Not Modified
  • POST:傳輸客戶端的數(shù)據(jù)
POST /submit.cgi HTTP/1.1
Host: www.example.com
Content-Length: 1560
-----------------------------
返回submit.cgi接收數(shù)據(jù)的處理結(jié)果
  • PUT:指定URI上傳文件,自身沒(méi)有驗(yàn)證機(jī)制,一般不開(kāi)放。REpresentational State Transfer標(biāo)準(zhǔn)的Web網(wǎng)站可能會(huì)開(kāi)放。
PUT /example.html HTTP/1.1
Host: www.example.com
Content-Type: text/html
Content-Length: 1560
-----------------------------------------
返回狀態(tài)碼 204 No Content(表示該文件已存在)
  • HEAD:除了不返回報(bào)文主體部分,其它和GET方法一樣。用于確認(rèn)URI的有效性和資源的更新時(shí)間。
HEAD /example.com HTTP/1.1
Host: www.example.com
--------------------------
返回index.html的響應(yīng)首部
  • DELETE:刪除指定URI上的文件
DELETE /example.com HTTP/1.1
Host: www.example.com
---------------------------------------------
返回狀態(tài)碼 204 No Content(表示該html已經(jīng)被刪除)
  • OPTIONS: 返回針對(duì)URI指定資源支持的方法
OPTIONS /example.com HTTP/1.1
Host: www.example.com
--------------------------------------------------
HTTP/1.1 200 OK
Allow: GET, POST, HEAD, OPTIONS(返回服務(wù)器指定的方法)
  • TRACE:追蹤路徑,因?yàn)镃ross-Site Tracing Attack,基本不用

  • CONNECT: 要求使用隧道協(xié)議連接代理,在隧道內(nèi)使用TCP協(xié)議通信

    使用 Secure Socket Layer 和 Transport Layer Security 加密傳輸

    CONNECT proxy.example.com:8080 HTTP/1.1
    Host: proxy.example.com
    -----------------------------------------
    HTTP/1.1 200 OK(進(jìn)入網(wǎng)絡(luò)隧道)
    

2.6 HTTP/1.1支持的方法

Method Explanation
GET 獲取資源
POST 傳輸實(shí)體主體
PUT 傳輸文件
HEAD 獲取報(bào)文頭部
DELETE 刪除文件
OPTIONS 詢問(wèn)支持的方法
TRACE 追蹤路徑
CONNECT 使用隧道協(xié)議連接代理

2.7 持久連接節(jié)省通信量

在HTTP最初的設(shè)計(jì)中,每進(jìn)行一次HTTP通信都要斷開(kāi)一次TCP連接。

客戶端和服務(wù)端的HTTP通信過(guò)程.jpg

每個(gè)資源都要發(fā)起一次完整的HTTP請(qǐng)求,一個(gè)網(wǎng)頁(yè)能需要很多次請(qǐng)求。

一個(gè)網(wǎng)頁(yè)多次HTTP請(qǐng)求.jpg

持久連接:Keep-Live,只要任意一端沒(méi)有明確提出斷開(kāi)連接,則一直保持TCP連接狀態(tài)。

一個(gè)網(wǎng)頁(yè)一次HTTP請(qǐng)求.jpg

持久連接的好處是:減少了TCP連接重復(fù)地建立和斷開(kāi)造成的額外開(kāi)銷,減輕了服務(wù)端的負(fù)載。并且降低了請(qǐng)求和響應(yīng)時(shí)間,提高了web頁(yè)面的響應(yīng)速度。

管線化:不用等待服務(wù)端響應(yīng),就可以直接發(fā)送下一個(gè)請(qǐng)求。請(qǐng)求越多,響應(yīng)速度提升越明顯。

管線化請(qǐng)求.jpg

2.8 cookie

HTTP協(xié)議是無(wú)狀態(tài)協(xié)議,不記錄之前發(fā)生過(guò)的請(qǐng)求和響應(yīng)狀態(tài)。

Cookie技術(shù),服務(wù)端在響應(yīng)報(bào)文中添加一個(gè)Set-Cookie的首部字段信息,通知客戶端保存Cookie。當(dāng)下次客戶端在往服務(wù)端發(fā)送請(qǐng)求時(shí),客戶端會(huì)自動(dòng)在請(qǐng)求頭部添加cookie后發(fā)送。服務(wù)端根據(jù)cookie查詢連接記錄,找到對(duì)應(yīng)的連接狀態(tài)。

帶cookie的HTTP請(qǐng)求.jpg
GET /reader/ HTTP/1.1
Host www.example.com
---------------------------------------------------------------------------------
HTTP/1.1 200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Server: Apache
<Set-Cookie: sid=1342077140226724; path=/; expires=Wed, 10-Otc-12 07:12:20 GMT>
Content-Type: text/plain; charset: UTF-8
---------------------------------------------------------------------------------
GET /image/ HTTP/1.1
Host: www.example.com
Cookie: sid=1342077140226724
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容