關(guān)于圖解HTTP協(xié)議摘要夫植,全部內(nèi)容上傳到本人的Github左胞,歡迎fork碘举。
2.0 目錄
2.1 客戶端和服務(wù)端之間的通信
2.2 通過請求和響應(yīng)的交換達(dá)成通信
2.3 HTTP是不保存狀態(tài)的協(xié)議
2.4 請求URI定位資源
2.5 與服務(wù)端交互的方法
2.6 HTTP/1.1支持的方法
2.7 持久連接節(jié)省通信量
2.8 cookie
2.1 客戶端和服務(wù)端之間的通信
HTTP協(xié)議是基于客戶端和服務(wù)端之間的通信
2.2 通過請求和響應(yīng)的交換達(dá)成通信
請求必定是從客戶端發(fā)出,服務(wù)端響應(yīng)請求并返回柒室。HTTP協(xié)議不支持雙向通信履磨,WebSocket協(xié)議支持蛉抓。
客戶端請求報文:
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)報文:
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é)議自身不保存請求和相應(yīng)之間的通信狀態(tài)剃诅∠锼停可以使用cookie來保存狀態(tài)信息。
2.4 請求URI定位資源
URI可以定位互聯(lián)網(wǎng)上的所有資源矛辕。
GET /index.html HTTP/1.1
Host: example.com
2.5 與服務(wù)端交互的方法
- GET:訪問已經(jīng)被URI識別的資源笑跛,指定的資源被解析之后,返回響應(yīng)的內(nèi)容聊品。
GET /index.html HTTP/1.1
Host: example.com
-------------------------
返回index.html的頁面資源
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以后更新過的index.html的頁面資源
如果沒有內(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上傳文件,自身沒有驗證機(jī)制翻屈,一般不開放陈哑。REpresentational State Transfer標(biāo)準(zhǔn)的Web網(wǎng)站可能會開放。
PUT /example.html HTTP/1.1
Host: www.example.com
Content-Type: text/html
Content-Length: 1560
-----------------------------------------
返回狀態(tài)碼 204 No Content(表示該文件已存在)
- HEAD:除了不返回報文主體部分伸眶,其它和GET方法一樣芥颈。用于確認(rèn)URI的有效性和資源的更新時間。
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: 返回針對URI指定資源支持的方法
OPTIONS /example.com HTTP/1.1
Host: www.example.com
--------------------------------------------------
HTTP/1.1 200 OK
Allow: GET, POST, HEAD, OPTIONS(返回服務(wù)器指定的方法)
TRACE:追蹤路徑赚抡,因為Cross-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 | 傳輸實體主體 |
PUT | 傳輸文件 |
HEAD | 獲取報文頭部 |
DELETE | 刪除文件 |
OPTIONS | 詢問支持的方法 |
TRACE | 追蹤路徑 |
CONNECT | 使用隧道協(xié)議連接代理 |
2.7 持久連接節(jié)省通信量
在HTTP最初的設(shè)計中涂臣,每進(jìn)行一次HTTP通信都要斷開一次TCP連接。
每個資源都要發(fā)起一次完整的HTTP請求售担,一個網(wǎng)頁能需要很多次請求赁遗。
持久連接:Keep-Live,只要任意一端沒有明確提出斷開連接族铆,則一直保持TCP連接狀態(tài)岩四。
持久連接的好處是:減少了TCP連接重復(fù)地建立和斷開造成的額外開銷,減輕了服務(wù)端的負(fù)載哥攘。并且降低了請求和響應(yīng)時間剖煌,提高了web頁面的響應(yīng)速度材鹦。
管線化:不用等待服務(wù)端響應(yīng),就可以直接發(fā)送下一個請求耕姊。請求越多桶唐,響應(yīng)速度提升越明顯。
2.8 cookie
HTTP協(xié)議是無狀態(tài)協(xié)議茉兰,不記錄之前發(fā)生過的請求和響應(yīng)狀態(tài)尤泽。
Cookie技術(shù),服務(wù)端在響應(yīng)報文中添加一個Set-Cookie的首部字段信息规脸,通知客戶端保存Cookie坯约。當(dāng)下次客戶端在往服務(wù)端發(fā)送請求時,客戶端會自動在請求頭部添加cookie后發(fā)送莫鸭。服務(wù)端根據(jù)cookie查詢連接記錄闹丐,找到對應(yīng)的連接狀態(tài)。
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