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