HTTP請(qǐng)求報(bào)文:
HTTP響應(yīng)報(bào)文:
使用首部字段是為了給瀏覽器和服務(wù)器提供報(bào)文主體大小、所使用的語(yǔ)言鸿染、認(rèn)證信息等內(nèi)容指蚜。
HTTP 首部字段是由首部字段名和字段值構(gòu)成的,中間用冒號(hào)“:” 分隔涨椒。
例如:Content-Type: text/html? ? Keep-Alive: timeout=15, max=100
備注:若 HTTP 首部字段重復(fù)了會(huì)如何
當(dāng) HTTP 報(bào)文首部中出現(xiàn)了兩個(gè)或兩個(gè)以上具有相同首部字段名時(shí)會(huì)怎么樣摊鸡?這種情況在規(guī)范內(nèi)尚未明確,根據(jù)瀏覽器內(nèi)部處理邏輯的不同蚕冬,結(jié)果可能并不一致免猾。有些瀏覽器會(huì)優(yōu)先處理第一次出現(xiàn)的首部字段,而有些則會(huì)優(yōu)先處理最后出現(xiàn)的首部字段
HTTP 首部字段根據(jù)實(shí)際用途被分為以下 4 種類型囤热。
通用首部字段(General Header Fields)
請(qǐng)求報(bào)文和響應(yīng)報(bào)文兩方都會(huì)使用的首部猎提。
請(qǐng)求首部字段(Request Header Fields)
從客戶端向服務(wù)器端發(fā)送請(qǐng)求報(bào)文時(shí)使用的首部。補(bǔ)充了請(qǐng)求的附加內(nèi)容旁蔼、客戶端信息锨苏、響應(yīng)內(nèi)容相關(guān)優(yōu)先級(jí)等信息。
響應(yīng)首部字段(Response Header Fields)
從服務(wù)器端向客戶端返回響應(yīng)報(bào)文時(shí)使用的首部棺聊。補(bǔ)充了響應(yīng)的附加內(nèi)容伞租,也會(huì)要求客戶端附加額外的內(nèi)容信息。
實(shí)體首部字段(Entity Header Fields)
針對(duì)請(qǐng)求報(bào)文和響應(yīng)報(bào)文的實(shí)體部分使用的首部限佩。補(bǔ)充了資源內(nèi)容更新時(shí)間等與實(shí)體有關(guān)的信息葵诈。
HTTP/1.1
通用首部字段
Cache-Control:
public 指令:所有用戶都可以利用緩存,鏈路上的所有代理服務(wù)器祟同,瀏覽器都可以緩存作喘。
private:響應(yīng)只針對(duì)特定用戶(瀏覽器),代表只有發(fā)起請(qǐng)求的瀏覽器才可以進(jìn)行緩存
https://stackoverflow.com/questions/3492319/private-vs-public-in-cache-control
no-cache指令:
從字面意思上很容易把 no-cache 誤解成為不緩存耐亏,但事實(shí)上 no-cache 代表不緩存過期的資源徊都,緩存會(huì)向源服務(wù)器進(jìn)行有效期確認(rèn)后處理資源,也許稱為 do-notserve-from-cache-without-revalidation 更合適广辰。no-store 才是真正地不進(jìn)行緩存暇矫,請(qǐng)讀者注意區(qū)別理解
max-age指令:
當(dāng)客戶端發(fā)送的請(qǐng)求中包含 max-age 指令時(shí)主之,如果判定緩存資源的緩存時(shí)間數(shù)值比指定時(shí)間的數(shù)值更小,那么客戶端就接收緩存的資源李根。另外槽奕,當(dāng)指定 max-age 值為 0,那么緩存服務(wù)器通常需要將請(qǐng)求轉(zhuǎn)發(fā)給源服務(wù)器房轿。當(dāng)服務(wù)器返回的響應(yīng)中包含 max-age 指令時(shí)粤攒,緩存服務(wù)器將不對(duì)資源的有效性再作確認(rèn),而 max-age 數(shù)值代表資源保存為緩存的最長(zhǎng)時(shí)間囱持。
應(yīng)用 HTTP/1.1 版本的緩存服務(wù)器遇到同時(shí)存在 Expires 首部字段的情況時(shí)夯接,會(huì)優(yōu)先處理 max-age 指令,而忽略掉 Expires 首部字段纷妆。
min-fresh 指令:
要求當(dāng)前時(shí)間加上min-fresh得到的時(shí)間要小于緩存的過期時(shí)間才可用盔几,否則就重新從源服務(wù)器重新獲取最新數(shù)據(jù)。
max-stale 指令:
使用 max-stale 可指示緩存資源掩幢,即使過期也照常接收逊拍。
如果指令未指定參數(shù)值,那么無論經(jīng)過多久际邻,客戶端都會(huì)接收響應(yīng)芯丧;如果指令中指定了具體數(shù)值,那么即使過期世曾,只要仍處于 max-stale指定的時(shí)間內(nèi)缨恒,仍舊會(huì)被客戶端接收。
only-if-cached 指令:
使用 only-if-cached 指令表示客戶端僅在緩存服務(wù)器本地緩存目標(biāo)資源的情況下才會(huì)要求其返回度硝。換言之肿轨,該指令要求緩存服務(wù)器不重新加載響應(yīng),也不會(huì)再次確認(rèn)資源有效性蕊程。若發(fā)生請(qǐng)求緩存服務(wù)器的本地緩存無響應(yīng),則返回狀態(tài)碼 504 Gateway Timeout驼唱。
must-revalidate 指令:
使用 must-revalidate 指令藻茂,代理會(huì)向源服務(wù)器再次驗(yàn)證即將返回的響應(yīng)緩存目前是否仍然有效。
若代理無法連通源服務(wù)器再次獲取有效資源的話玫恳,緩存必須給客戶端一條 504(Gateway Timeout)狀態(tài)碼辨赐。
另外,使用 must-revalidate 指令會(huì)忽略請(qǐng)求的 max-stale 指令(即使已經(jīng)在首部使用了 max-stale京办,也不會(huì)再有效果)
no-transform 指令:
使用 no-transform 指令規(guī)定無論是在請(qǐng)求還是響應(yīng)中掀序,緩存都不能改變實(shí)體主體的媒體類型
https://docs.microsoft.com/en-us/dotnet/api/system.web.httpcachepolicy.setnotransforms?view=netframework-4.7.2
不得對(duì)資源進(jìn)行轉(zhuǎn)換或轉(zhuǎn)變。Content-Encoding, Content-Range, Content-Type等HTTP頭不能由代理修改惭婿。例如不恭,非透明代理可以對(duì)圖像格式進(jìn)行轉(zhuǎn)換叶雹,以便節(jié)省緩存空間或者減少緩慢鏈路上的流量。 no-transform指令不允許這樣做换吧。
Connection:
控制不再轉(zhuǎn)發(fā)給代理的首部字段
管理持久連接
HTTP/1.1 版本的默認(rèn)連接都是持久連接折晦。為此,客戶端會(huì)在持久連接上連續(xù)發(fā)送請(qǐng)求沾瓦。當(dāng)服務(wù)器端想明確斷開連接時(shí)满着,則指定Connection 首部字段的值為 Close。
Date:
首部字段Date表明創(chuàng)建HTTP報(bào)文的日期和時(shí)間
Pragma:
這個(gè)基本不用管贯莺,是為了兼容http 1.1以前的版本而遺留的字段风喇。
Trailer:
關(guān)于Trailer的說明:
https://blog.csdn.net/pud_zha/article/details/7926395
Transfer-Encoding:
首部字段 Transfer-Encoding 規(guī)定了傳輸報(bào)文主體時(shí)采用的編碼方式。
Upgrade:
Via:
使用首部字段 Via 是為了追蹤客戶端與服務(wù)器之間的請(qǐng)求和響應(yīng)報(bào)文的傳輸路徑缕探。
Warning:
HTTP/1.1 的 Warning 首部是從 HTTP/1.0 的響應(yīng)首部(Retry-After)演變過來的魂莫。該首部通常會(huì)告知用戶一些與緩存相關(guān)的問題的警告
請(qǐng)求首部字段:
Accept:
Accept 首部字段可通知服務(wù)器,用戶代理能夠處理的媒體類型及媒體類型的相對(duì)優(yōu)先級(jí)
Accept-Charset:
Accept-Charset 首部字段可用來通知服務(wù)器用戶代理支持的字符集及字符集的相對(duì)優(yōu)先順序撕蔼。另外豁鲤,可一次性指定多種字符集。與首部字段 Accept 相同的是可用權(quán)重 q 值來表示相對(duì)優(yōu)先級(jí)
Accept-Encoding:
Accept-Encoding: gzip, deflate
Accept-Encoding 首部字段用來告知服務(wù)器用戶代理支持的內(nèi)容編碼及內(nèi)容編碼的優(yōu)先級(jí)順序
Accept-Language:
首部字段 Accept-Language 用來告知服務(wù)器用戶代理能夠處理的自然語(yǔ)言集(指中文或英文等)鲸沮,以及自然語(yǔ)言集的相對(duì)優(yōu)先級(jí)琳骡。可一次指定多種自然語(yǔ)言集讼溺。
Authorization:
首部字段 Authorization 是用來告知服務(wù)器楣号,用戶代理的認(rèn)證信息(證書值)。
Expect:
客戶端使用首部字段 Expect 來告知服務(wù)器怒坯,期望出現(xiàn)的某種特定行為炫狱。因服務(wù)器無法理解客戶端的期望作出回應(yīng)而發(fā)生錯(cuò)誤時(shí),會(huì)返回狀態(tài)碼 417 Expectation Failed
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Expect
From:
首部字段 From 用來告知服務(wù)器使用用戶代理的用戶的電子郵件地址剔猿。通常视译,其使用目的就是為了顯示搜索引擎等用戶代理的負(fù)責(zé)人的電子郵件聯(lián)系方式。
Host:
首部字段 Host 會(huì)告知服務(wù)器归敬,請(qǐng)求的資源所處的互聯(lián)網(wǎng)主機(jī)名和端口號(hào)酷含。Host 首部字段在 HTTP/1.1 規(guī)范內(nèi)是唯一一個(gè)必須被包含在請(qǐng)求內(nèi)的首部字段。
If-Match:
關(guān)于ETag的說明:http://www.reibang.com/p/a3ea9619c38d
If-Modified-Since:
Last-Modified:服務(wù)端返回給客戶端汪茧,告知上次修改時(shí)間
If-Modified-Since:客戶端傳送給服務(wù)端椅亚,超過這個(gè)時(shí)間,就200給最新的舱污;沒超過就直接返回304呀舔,表示不用傳輸,用緩存的就行扩灯,沒變過媚赖。
If-None-Match:
If-None-Match要找的匹配值也是相對(duì)于ETag的霜瘪,如果匹配上,直接返回304省古,如果沒匹配上粥庄,返回200和最新的資源。
If-Range:
首部字段 If-Range 屬于附帶條件之一豺妓。它告知服務(wù)器若指定的 If-Range 字段值(ETag 值或者時(shí)間)和請(qǐng)求資源的 ETag 值或時(shí)間相一致時(shí)惜互,則作為范圍請(qǐng)求處理。反之琳拭,則返回全體資源训堆。
Max-Forwards:
可以靈活使用首部字段 Max-Forwards,針對(duì)問題產(chǎn)生的原因展開調(diào)查白嘁。由于當(dāng) Max-Forwards 字段值為 0 時(shí)坑鱼,服務(wù)器就會(huì)立即返回響應(yīng),由此我們至少可以對(duì)以那臺(tái)服務(wù)器為終點(diǎn)的傳輸路徑的通信狀況有所把握
Proxy-Authorization:
接收到從代理服務(wù)器發(fā)來的認(rèn)證質(zhì)詢時(shí)絮缅,客戶端會(huì)發(fā)送包含首部字段Proxy-Authorization 的請(qǐng)求鲁沥,以告知服務(wù)器認(rèn)證所需要的信息。
Proxy-Authorization: Basic dGlwOjkpNLAGfFY5
Range:
接收到附帶 Range 首部字段請(qǐng)求的服務(wù)器耕魄,會(huì)在處理請(qǐng)求之后返回狀態(tài)碼為 206 Partial Content 的響應(yīng)画恰。無法處理該范圍請(qǐng)求時(shí),則會(huì)返回狀態(tài)碼 200 OK 的響應(yīng)及全部資源吸奴。
Referrer:
首部字段 Referer 會(huì)告知服務(wù)器請(qǐng)求的原始資源的 URI允扇。
User-Agent:
響應(yīng)首部字段:
Accept-Ranges:
首部字段 Accept-Ranges 是用來告知客戶端服務(wù)器是否能處理范圍請(qǐng)求,以指定獲取服務(wù)器端某個(gè)部分的資源则奥】既螅可指定的字段值有兩種,可處理范圍請(qǐng)求時(shí)指定其為 bytes读处,反之則指定其為 none糊治。
Age:
首部字段 Age 能告知客戶端,源服務(wù)器在多久前創(chuàng)建了響應(yīng)罚舱。字段值的單位為秒俊戳。
ETag:
首部字段 ETag 能告知客戶端實(shí)體標(biāo)識(shí)。它是一種可將資源以字符串形式做唯一性標(biāo)識(shí)的方式馆匿。服務(wù)器會(huì)為每份資源分配對(duì)應(yīng)的 ETag值。
Location:
使用首部字段 Location 可以將響應(yīng)接收方引導(dǎo)至某個(gè)與請(qǐng)求 URI 位置不同的資源燥滑〗ケ保基本上,該字段會(huì)配合 3xx :Redirection 的響應(yīng)铭拧,提供重定向的URI赃蛛。
Proxy-Authenticate:
首部字段 Proxy-Authenticate 會(huì)把由代理服務(wù)器所要求的認(rèn)證信息發(fā)送給客戶端
Proxy-Authenticate: Basic realm="Usagidesign Auth"
Retry-After:
首部字段 Retry-After 告知客戶端應(yīng)該在多久之后再次發(fā)送請(qǐng)求恃锉。主要配合狀態(tài)碼 503 Service Unavailable 響應(yīng),或 3xx Redirect 響應(yīng)一起使用呕臂。
Server:
首部字段 Server 告知客戶端當(dāng)前服務(wù)器上安裝的 HTTP 服務(wù)器應(yīng)用程序的信息
Vary:
當(dāng)代理服務(wù)器接收到帶有 Vary 首部字段指定獲取資源的請(qǐng)求時(shí)破托,如果使用的 Accept-Language 字段的值相同,那么就直接從緩存返回響應(yīng)歧蒋。反之土砂,則需要先從源服務(wù)器端獲取資源后才能作為響應(yīng)返回
其實(shí)就是標(biāo)識(shí)用什么東西來決定當(dāng)前已緩存的內(nèi)容是否可用。
WWW-Authenticate:
WWW-Authenticate: Basic realm="Usagidesign Auth"
首部字段 WWW-Authenticate 用于 HTTP 訪問認(rèn)證谜洽。它會(huì)告知客戶端適用于訪問請(qǐng)求 URI 所指定資源的認(rèn)證方案(Basic 或是 Digest)和帶參數(shù)提示的質(zhì)詢(challenge)萝映。
實(shí)體首部字段:
實(shí)體首部字段是包含在請(qǐng)求報(bào)文和響應(yīng)報(bào)文中的實(shí)體部分所使用的首部,用于補(bǔ)充內(nèi)容的更新時(shí)間等與實(shí)體相關(guān)的信息阐虚。
Allow:
首部字段 Allow 用于通知客戶端能夠支持 Request-URI 指定資源的所有 HTTP 方法序臂。當(dāng)服務(wù)器接收到不支持的 HTTP 方法時(shí)实束,會(huì)以狀態(tài)碼405 Method Not Allowed 作為響應(yīng)返回。與此同時(shí)咸灿,還會(huì)把所有能支持的 HTTP 方法寫入首部字段 Allow 后返回。
Content-Encoding:
首部字段 Content-Encoding 會(huì)告知客戶端服務(wù)器對(duì)實(shí)體的主體部分選用的內(nèi)容編碼方式
內(nèi)容編碼目的是優(yōu)化傳輸內(nèi)容大小鲫咽,通俗地講就是進(jìn)行壓縮
Content-Length:
首部字段 Content-Length 表明了實(shí)體主體部分的大泄纫臁(單位是字節(jié))
Content-Location:
Content-Location: http://www.hackr.jp/index-ja.html
首部字段 Content-Location 給出與報(bào)文主體部分相對(duì)應(yīng)的 URI歹嘹。和首部字段 Location 不同,Content-Location 表示的是報(bào)文主體返回資源對(duì)應(yīng)的 URI
Location指定的是一個(gè)重定向請(qǐng)求的目的地址(或者新創(chuàng)建的文件的URL)
Content-MD5:
Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==
首部字段 Content-MD5 是一串由 MD5 算法生成的值材蛛,其目的在于檢查報(bào)文主體在傳輸過程中是否保持完整,以及確認(rèn)傳輸?shù)竭_(dá)
Content-Range:
針對(duì)范圍請(qǐng)求卑吭,返回響應(yīng)時(shí)使用的首部字段 Content-Range马绝,能告知客戶端作為響應(yīng)返回的實(shí)體的哪個(gè)部分符合范圍請(qǐng)求
Content-Type:
Content-Type: text/html; charset=UTF-8
首部字段 Content-Type 說明了實(shí)體主體內(nèi)對(duì)象的媒體類型
Expires:
首部字段 Expires 會(huì)將資源失效的日期告知客戶端豆赏。緩存服務(wù)器在接收到含有首部字段 Expires 的響應(yīng)后,會(huì)以緩存來應(yīng)答請(qǐng)求,在Expires 字段值指定的時(shí)間之前掷邦,響應(yīng)的副本會(huì)一直被保存白胀。當(dāng)超過指定的時(shí)間后,緩存服務(wù)器在請(qǐng)求發(fā)送過來時(shí)抚岗,會(huì)轉(zhuǎn)向源服務(wù)器請(qǐng)求資源或杠。
Last-Modified:
首部字段 Last-Modified 指明資源最終修改的時(shí)間。一般來說宣蔚,這個(gè)值就是 Request-URI 指定資源被修改的時(shí)間
為Cookie服務(wù)的首部字段:
Cookie 的工作機(jī)制是用戶識(shí)別及狀態(tài)管理向抢。Web 網(wǎng)站為了管理用戶的狀態(tài)會(huì)通過 Web 瀏覽器,把一些數(shù)據(jù)臨時(shí)寫入用戶的計(jì)算機(jī)內(nèi)件已。接著當(dāng)用戶訪問該Web網(wǎng)站時(shí)笋额,可通過通信方式取回之前發(fā)放的Cookie。
調(diào)用 Cookie 時(shí)篷扩,由于可校驗(yàn) Cookie 的有效期兄猩,以及發(fā)送方的域、路徑鉴未、協(xié)議等信息枢冤,所以正規(guī)發(fā)布的 Cookie 內(nèi)的數(shù)據(jù)不會(huì)因來自其他Web 站點(diǎn)和攻擊者的攻擊而泄露。
Set-Cookie:
Set-Cookie字段的屬性:
cookie關(guān)于domain和path的設(shè)置可以參考:https://www.cnblogs.com/lcchuguo/p/5146361.html