HTTP 協(xié)議
HTTP 是一種在客戶端和服務(wù)器之間編碼和傳輸數(shù)據(jù)的方法。
它是一個(gè)請求/響應(yīng)協(xié)議:客戶端和服務(wù)端針對相關(guān)內(nèi)容和完成狀態(tài)信息的請求和響應(yīng)。
HTTP 是獨(dú)立的,允許請求和響應(yīng)流經(jīng)許多執(zhí)行負(fù)載均衡,緩存,加密和壓縮的中間路由器和服務(wù)器。
一個(gè)基本的 HTTP 請求由一個(gè)動(dòng)詞(方法)和一個(gè)資源(端點(diǎn))組成。

HTTP 是依賴于較低級協(xié)議(如 TCP 和 UDP)的應(yīng)用層協(xié)議。
HTTP請求
發(fā)送HTTP請求的過程就是構(gòu)建HTTP請求報(bào)文并通過TCP協(xié)議中發(fā)送到服務(wù)器指定端口(HTTP協(xié)議80/8080, HTTPS協(xié)議443)。
HTTP請求報(bào)文是由三部分組成:
- 請求行
- 請求報(bào)頭 Header
- 請求正文
請求行
格式如下:
Method Request-URL HTTP-Version CRLF
例如 GET /index.html HTTP1.1
常用的方法有: GET, POST, PUT, DELETE, OPTIONS(返回請求的資源所支持的方法), HEAD(僅請求響應(yīng)首部)。

請求頭信息 Request Header
請求報(bào)頭允許客戶端向服務(wù)器傳遞請求的附加信息和客戶端自身的信息。
客戶端不一定特指瀏覽器,有時(shí)候也可使用Linux下的CURL命令以及HTTP客戶端測試工具等。
常見的請求報(bào)頭有:
- Accept:指定客戶端用于接受哪些類型的信息
- Accept-Charset
- Accept-Encoding:指定客戶端接受的編碼方式
- Accept-Language
- Content-Type
- Authorization:客戶端提供給服務(wù)器的認(rèn)證信息
- Cookie:每次請求時(shí)都會攜帶上 Cookie 以方便服務(wù)器端識別是否是同一個(gè)客戶端
- Connection:設(shè)置為 keep-alive 用于告訴客戶端本次HTTP請求結(jié)束之后并不需要關(guān)閉TCP連接,這樣可以使下次HTTP請求使用相同的TCP通道,節(jié)省TCP連接建立的時(shí)間
- User-Agent:用戶代理,一般情況是瀏覽器,也有其他類型

請求正文
當(dāng)使用POST, PUT等方法時(shí),通常需要客戶端向服務(wù)器傳遞數(shù)據(jù)。
這些數(shù)據(jù)就儲存在請求正文中。在請求包頭中有一些與請求正文相關(guān)的信息,例如: 現(xiàn)在的Web應(yīng)用通常采用 Restful 架構(gòu),請求的數(shù)據(jù)格式一般為json。這時(shí)就需要設(shè)置 Content-Type: application/json。
HTTP響應(yīng)
HTTP響應(yīng)報(bào)文也是由三部分組成:
- 狀態(tài)碼
- 響應(yīng)報(bào)頭
- 響應(yīng)報(bào)文
狀態(tài)碼
狀態(tài)碼是由3位數(shù)組成,第一個(gè)數(shù)字定義了響應(yīng)的類別,且有五種可能取值:
- 1xx:指示信息–表示請求已接收,繼續(xù)處理
- 2xx:成功–表示請求已被成功接收、理解、接受
- 3xx:重定向–要完成請求必須進(jìn)行更進(jìn)一步的操作
- 4xx:客戶端錯(cuò)誤–請求有語法錯(cuò)誤或請求無法實(shí)現(xiàn)
- 5xx:服務(wù)器端錯(cuò)誤–服務(wù)器未能實(shí)現(xiàn)合法的請求
例如 HTTP 1.1 200 OK(即版本號 + 狀態(tài)碼)

響應(yīng)報(bào)頭 Response Header

響應(yīng)報(bào)文
服務(wù)器返回給瀏覽器的文本信息,通常HTML, CSS, JS, 圖片等文件就放在這一部分。
HTTP header中的 Cache-control
網(wǎng)頁的緩存是由HTTP消息頭中的 Cache-control 來控制的,常見的取值有private、no-cache、max-age、must-revalidate等,默認(rèn)為private。其作用根據(jù)不同的重新瀏覽方式分為以下幾種情況:
打開新窗口
如果指定Cache-control的值為private、no-cache、must-revalidate,那么打開新窗口訪問時(shí)都會重新訪問服務(wù)器。而如果指定了max-age值,那么在此值內(nèi)的時(shí)間里就不會重新訪問服務(wù)器,例如:Cache-control: max-age=5表示當(dāng)訪問此網(wǎng)頁后的5秒內(nèi)再次訪問不會去服務(wù)器。在地址欄回車
如果指定Cache-control的值為private或must-revalidate,則只有第一次訪問時(shí)會訪問服務(wù)器,以后就不再訪問。如果值為no-cache,那么每次都會訪問。如果值為max-age,則在過期之前不會重復(fù)訪問。按后退按扭
如果指定Cache-control的值為private、must-revalidate、max-age,則不會重訪問,而如果為no-cache,則每次都重復(fù)訪問按刷新按扭
無論為何值,都會重復(fù)訪問
當(dāng)指定Cache-control值為“no-cache”時(shí),訪問此頁面不會在Internet臨時(shí)文件夾留下頁面?zhèn)浞荨?/p>