HTTP首部(1)
1、報(bào)文首部
HTTP協(xié)議的請(qǐng)求和響應(yīng)必定包含HTTP首部,它包括了客戶端和服務(wù)端分別處理請(qǐng)求和響應(yīng)提供所需要的信息。報(bào)文主體字兒是所需要的用戶和資源的信息都在這邊。
HTTP請(qǐng)求報(bào)文組成
????? ? 方法,URL,HTTP版本,HTTP首部字段
HTTP響應(yīng)報(bào)文組成
?????? HTTP版本,狀態(tài)碼(數(shù)字和原因短語),HTTP首部字段
2、HTTP首部字段
2.1 ?首部介紹
HTTP首部信息傳遞了重要的信息,是構(gòu)成HTTP報(bào)文的要素。
2.2 HTTP首部字段結(jié)構(gòu)
首部字段結(jié)構(gòu)
?????? 首部字段名:字段值
另外,字段值對(duì)應(yīng)單個(gè)HTTP首部字段可以有多個(gè)值,中間用逗號(hào)間隔。如
????? Keep-Alive: timeout=15,max=100
2.3 HTTP的4種首部字段類型
通用首部字段:請(qǐng)求報(bào)文和響應(yīng)報(bào)文兩方都會(huì)使用的首部;
請(qǐng)求首部字段:從客戶端到服務(wù)端發(fā)送的請(qǐng)求報(bào)文時(shí)使用的首部。補(bǔ)充了請(qǐng)求的附加內(nèi)容,客戶端信息、響應(yīng)內(nèi)容相關(guān)優(yōu)先級(jí)信息;
響應(yīng)首部字段:從服務(wù)端到客戶端發(fā)送的響應(yīng)報(bào)文時(shí)使用的首部。補(bǔ)充了響應(yīng)的附加內(nèi)容,也會(huì)要求客戶端附加額外的內(nèi)容信息;
實(shí)體首部字段:針對(duì)請(qǐng)求報(bào)文和響應(yīng)報(bào)文的實(shí)體部分使用的首部。補(bǔ)充了資源內(nèi)容更新時(shí)間等于實(shí)體相關(guān)的信息。
?? ?
請(qǐng)求首部字段
響應(yīng)首部字段
2.4 其他首部字段
端到端首部(end-to-end Header)
????? ? 分在此類別中的首部會(huì)轉(zhuǎn)發(fā)請(qǐng)求/響應(yīng)對(duì)應(yīng)的最終接收目標(biāo),且必須保存在由緩存生成的響應(yīng)中,另外規(guī)定它必須被轉(zhuǎn)發(fā)。
逐跳首部(Hop-by-hop Header)
?????? 分在此類別中的首部只對(duì)單次轉(zhuǎn)發(fā)有效,會(huì)因通過緩存或代理而不再轉(zhuǎn)發(fā)。逐跳首部字段只對(duì)concention,keep-alive,proxy-authenticate,proxy-authorization,trailer,te,transfer-encoding、upgrade這8個(gè)首部字段有效,其他的字段都為端到端首部。
3、HTTP通用首部字段
3.1 cache-control?
? ? ?
?
Cache-Control: 是否能緩存的指令
3.1.1 ??public、private
Cache-Control :public:其他用戶也可利用緩存;
Cache-Control :private:響應(yīng)只以特定的用戶作為對(duì)象;緩存服務(wù)器只會(huì)對(duì)特定用戶提供緩存服務(wù),其他用戶則不會(huì)。
3.1.2 no-cache
Cache-Control :no-cache:為防止從緩存中返回過期的資源,
當(dāng)請(qǐng)求首部中包含no-cache時(shí)則表示客戶端將不會(huì)接收緩存過的響應(yīng),于是,中間的緩存服務(wù)器會(huì)把客戶端請(qǐng)求轉(zhuǎn)發(fā)給源服務(wù)器。
當(dāng)響應(yīng)首部中包含no-cache時(shí)則表示緩存服務(wù)器不對(duì)資源進(jìn)行緩存。源服務(wù)器以后也將不再對(duì)緩存服務(wù)器請(qǐng)求中的資源進(jìn)行有效性確認(rèn)且禁止對(duì)其響應(yīng)資源進(jìn)行緩存操作。
Cache-Control :no-cache=Location
?????? 無參數(shù)值的首部字段可以使用緩存,有參數(shù)值不使用緩存,指定首部字段具體值的方式,只能在響應(yīng)指令中指定。
3.1.3?no-store
Cache-Control:no-store? 控制可執(zhí)行緩存的對(duì)象指令,使用該指令,暗示請(qǐng)求和響應(yīng)中包含機(jī)密信息
?????? no-cache:不緩存過期資源
?????? no-store:不在本地存儲(chǔ)請(qǐng)求和響應(yīng)的任一部分
3.1.4?s-maxage
指定緩存期限和認(rèn)證的指令
Cache-Control: s-maxage=604800(單位:秒)
s-maxage與max-age指令相同,但是不同點(diǎn)是s-maxage指令只適用于供多位用戶使用的公共緩存服務(wù)器(一般為代理),也可以說對(duì)于向同一用戶重復(fù)返回響應(yīng)的服務(wù)器來說,這個(gè)指令沒有任何作用。同時(shí),使用此字段后,expires和max-age字段無效。
3.1.5?max-age
資源保存為緩存的最長(zhǎng)時(shí)間
Cache-Control: max-age=604800(單位:秒)
?????? 客戶端請(qǐng)求包含該字段:如果請(qǐng)求的資源的緩存時(shí)間數(shù)值比指定時(shí)間數(shù)值小,則客戶端直接接受緩存的資源,當(dāng)max-age為0時(shí),那么緩存服務(wù)器把請(qǐng)求轉(zhuǎn)發(fā)給源服務(wù)器。
?????? 服務(wù)器返回包含該字段:緩存服務(wù)器將不對(duì)資源進(jìn)行有效性在確認(rèn)。
HTTP/1.1: max-age優(yōu)先處理,expires忽略;
HTTP/1.0: expires優(yōu)先處理,max-age忽略。
3.1.6 min-fresh
要求緩存服務(wù)器返回至少還未過指定時(shí)間的緩存資源
Cache-Control: min-fresh=60(單位:秒)
當(dāng)指定min-fresh為60秒過后,過了60秒的資源都無法作為響應(yīng)返回。
3.1.7?max-stale:表示緩存資源,即使過期也照樣接收
Cache-Control: max-stale =60(單位:秒)
max-stale未指定參數(shù)值,則表示無論經(jīng)過多久,客戶端都會(huì)接收響應(yīng);如果指定了具體參數(shù)值,那么即使過期,只要仍處于max-stale指定時(shí)間內(nèi),仍舊會(huì)被客戶端接收。
3.1.8?only-if-cached?
Cache-Control: only-if-cached
表示客戶端僅在緩存服務(wù)器本地緩存目標(biāo)資源的情況下才會(huì)要求其返回。或者說,如果請(qǐng)求資源緩存服務(wù)器上存在,則永遠(yuǎn)不再重新加載響應(yīng),也不會(huì)確定資源有效性,如果不存在,則返回狀態(tài)碼504 gateway timeout。
3.1.9?must-revalidate
代理會(huì)向源服務(wù)器再次驗(yàn)證即將返回的響應(yīng)緩存目前是否仍然有效
Cache-Control: must-revalidate
如果代理無法連通源服務(wù)器,則返回504 gateway timeout。
并且must-revalidate與max-stale沖突,must-revalidate使max-stale無效。
3.1.10 proxy-revalidate
要求所有的緩存服務(wù)器在接收客戶端帶有該指令的請(qǐng)求返回響應(yīng)之前,必須再次驗(yàn)證緩存的有效性
? ?Cache-Control: proxy-revalidate
3.1.11 no-transform
無論在請(qǐng)求還是響應(yīng)中,緩存都不能改變實(shí)體主體的媒體類型,主要為了防止緩存或代理壓縮圖片等操作。
Cache-Control: no-transform
3.2 ?connection
作用:控制不在轉(zhuǎn)發(fā)給代理的首部字段和管理持久連接。
??
? ? ?
3.3 ?date
三種表示格式,主要是協(xié)議版本不同。
3.4 ?Prame
HTTP/1.1之前版本遺留字段,向后兼容,Parame:no-cache,為通用首部字段,只用于客戶端發(fā)送的請(qǐng)求中。客戶端要求所有中間服務(wù)器不返回緩存的資源。通常情況下Parame:no-cache和Cache-Control :no-cache都在請(qǐng)求中包含。
3.5 trailer
此字段會(huì)事先說明在報(bào)文主體后記錄了哪些首部字段,該首部字段可應(yīng)用在HTTP/1,1版本分塊傳輸編碼時(shí)。
3.6 ? transfer-encoding?
傳輸報(bào)文主體時(shí)采用的編碼方式。HTTP/1.1的傳輸編碼方式僅對(duì)分塊傳輸編碼有效。
3.7?upgrade
此字段只能作用于相鄰服務(wù)器之間,如果相鄰服務(wù)器則表示監(jiān)測(cè)HTTP協(xié)議及其他協(xié)議是否可使用更高的版本進(jìn)行通信,其參數(shù)值可以用來指定一個(gè)完全不同的通信協(xié)議。
如果不是相鄰服務(wù)器則體現(xiàn)了connection的另一個(gè)作用:控制不在轉(zhuǎn)發(fā)給代理的首部字段
?
3.8 via
?? 此字段用于追蹤客戶端和服務(wù)端之間的請(qǐng)求和響應(yīng)報(bào)文的傳輸路徑。
Via :首部是為了追蹤傳輸路徑,所以經(jīng)常會(huì)在TRACE方法一起使用。
3.9?warning
HTTP/1.0:Retry-After →→→→HTTP/1.1:Warning
Warning:【警告碼】【警告主機(jī):端口號(hào)】【警告內(nèi)容】【日期時(shí)間】
轉(zhuǎn)載于:https://www.cnblogs.com/tlxf-blog/p/11078366.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: Save the Room【找规律】
- 下一篇: golang cobra powersh