HTTP 協(xié)議
HTTP 是一種在客戶端和服務(wù)器之間編碼和傳輸數(shù)據(jù)的方法。
它是一個(gè)請(qǐng)求/響應(yīng)協(xié)議:客戶端和服務(wù)端針對(duì)相關(guān)內(nèi)容和完成狀態(tài)信息的請(qǐng)求和響應(yīng)肆汹。
HTTP 是獨(dú)立的攒至,允許請(qǐng)求和響應(yīng)流經(jīng)許多執(zhí)行負(fù)載均衡嗓袱,緩存,加密和壓縮的中間路由器和服務(wù)器梧却。
一個(gè)基本的 HTTP 請(qǐng)求由一個(gè)動(dòng)詞(方法)和一個(gè)資源(端點(diǎn))組成荆几。
HTTP 是依賴于較低級(jí)協(xié)議(如 TCP 和 UDP)的應(yīng)用層協(xié)議抬纸。
HTTP請(qǐng)求
發(fā)送HTTP請(qǐng)求的過(guò)程就是構(gòu)建HTTP請(qǐng)求報(bào)文并通過(guò)TCP協(xié)議中發(fā)送到服務(wù)器指定端口(HTTP協(xié)議80/8080, HTTPS協(xié)議443)纷铣。
HTTP請(qǐng)求報(bào)文是由三部分組成:
- 請(qǐng)求行
- 請(qǐng)求報(bào)頭 Header
- 請(qǐng)求正文
請(qǐng)求行
格式如下:
Method Request-URL HTTP-Version CRLF
例如 GET /index.html HTTP1.1
常用的方法有: GET, POST, PUT, DELETE, OPTIONS(返回請(qǐng)求的資源所支持的方法), HEAD(僅請(qǐng)求響應(yīng)首部)。
請(qǐng)求頭信息 Request Header
請(qǐng)求報(bào)頭允許客戶端向服務(wù)器傳遞請(qǐng)求的附加信息和客戶端自身的信息战转。
客戶端不一定特指瀏覽器搜立,有時(shí)候也可使用Linux下的CURL命令以及HTTP客戶端測(cè)試工具等。
常見的請(qǐng)求報(bào)頭有:
- Accept:指定客戶端用于接受哪些類型的信息
- Accept-Charset
- Accept-Encoding:指定客戶端接受的編碼方式
- Accept-Language
- Content-Type
- Authorization:客戶端提供給服務(wù)器的認(rèn)證信息
- Cookie:每次請(qǐng)求時(shí)都會(huì)攜帶上 Cookie 以方便服務(wù)器端識(shí)別是否是同一個(gè)客戶端
- Connection:設(shè)置為 keep-alive 用于告訴客戶端本次HTTP請(qǐng)求結(jié)束之后并不需要關(guān)閉TCP連接槐秧,這樣可以使下次HTTP請(qǐng)求使用相同的TCP通道啄踊,節(jié)省TCP連接建立的時(shí)間
- User-Agent:用戶代理,一般情況是瀏覽器刁标,也有其他類型
請(qǐng)求正文
當(dāng)使用POST, PUT等方法時(shí)颠通,通常需要客戶端向服務(wù)器傳遞數(shù)據(jù)。
這些數(shù)據(jù)就儲(chǔ)存在請(qǐng)求正文中膀懈。在請(qǐng)求包頭中有一些與請(qǐng)求正文相關(guān)的信息顿锰,例如: 現(xiàn)在的Web應(yīng)用通常采用 Restful 架構(gòu),請(qǐng)求的數(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:指示信息–表示請(qǐng)求已接收牢撼,繼續(xù)處理
- 2xx:成功–表示請(qǐng)求已被成功接收匙隔、理解、接受
- 3xx:重定向–要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作
- 4xx:客戶端錯(cuò)誤–請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn)
- 5xx:服務(wù)器端錯(cuò)誤–服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求
例如 HTTP 1.1 200 OK
(即版本號(hào) + 狀態(tài)碼)
響應(yīng)報(bào)頭 Response Header
響應(yīng)報(bào)文
服務(wù)器返回給瀏覽器的文本信息浪默,通常HTML, CSS, JS, 圖片等文件就放在這一部分牡直。
HTTP header中的 Cache-control
網(wǎng)頁(yè)的緩存是由HTTP消息頭中的 Cache-control
來(lái)控制的缀匕,常見的取值有private纳决、no-cache、max-age乡小、must-revalidate等阔加,默認(rèn)為private。其作用根據(jù)不同的重新瀏覽方式分為以下幾種情況:
打開新窗口
如果指定Cache-control
的值為private满钟、no-cache胜榔、must-revalidate,那么打開新窗口訪問(wèn)時(shí)都會(huì)重新訪問(wèn)服務(wù)器湃番。而如果指定了max-age值夭织,那么在此值內(nèi)的時(shí)間里就不會(huì)重新訪問(wèn)服務(wù)器,例如:Cache-control: max-age=5
表示當(dāng)訪問(wèn)此網(wǎng)頁(yè)后的5秒內(nèi)再次訪問(wèn)不會(huì)去服務(wù)器吠撮。在地址欄回車
如果指定Cache-control
的值為private或must-revalidate尊惰,則只有第一次訪問(wèn)時(shí)會(huì)訪問(wèn)服務(wù)器,以后就不再訪問(wèn)泥兰。如果值為no-cache弄屡,那么每次都會(huì)訪問(wèn)。如果值為max-age鞋诗,則在過(guò)期之前不會(huì)重復(fù)訪問(wèn)膀捷。按后退按扭
如果指定Cache-control
的值為private、must-revalidate削彬、max-age全庸,則不會(huì)重訪問(wèn),而如果為no-cache融痛,則每次都重復(fù)訪問(wèn)按刷新按扭
無(wú)論為何值糕篇,都會(huì)重復(fù)訪問(wèn)
當(dāng)指定Cache-control值為“no-cache”時(shí),訪問(wèn)此頁(yè)面不會(huì)在Internet臨時(shí)文件夾留下頁(yè)面?zhèn)浞荨?/p>