http協議(七)通用首部字段


通用首部字段的意思,就是:請求和響應報文雙方都會使用的首部

1、Cache-Control

通過指定它的指令,能操作緩存的工作機制

指令參數是可選的,多個指令通過“,”分隔

Cache-Control: private, max-age=0, no-cache

Cache-Control指令一覽:

1.1  緩存請求指令

指令

參數

說明

no-cache

強制向源服務器再次驗證

no-store

不緩存請求或相應的任何內容

max-age[秒]

必須

相應的最大Age值

max-stale(=[秒])

可省略

接收已過期的響應

min-fresh=[秒]

必須

期望在指定時間內的響應仍有效

no-transform

代理不可更改媒體類型

only-if-cached

從緩存獲取資源

cache-extension

 

新標記指令(token{-})

 

                                                                          

    

 

 

 

 

 

 

 

 

 

 

 

 

1.2  緩存響應指令

指令

參數

說明

public

可向任意方提供響應的緩存

private

可省略

僅向特定用戶返回響應

no-cache

可省略

緩存前必須先確認其有效性

no-store

不緩存請求或響應的任何內容

no-transform

代理不可更改媒體類型

must-revalidate

可緩存但必須再向源服務器進行確認

proxy-revalidate

要求中間緩存服務器對換緩存的響應有效性再次確認

max-age=[秒]

必需

響應的最大Age值

s-maxage=[秒]

必需

公共緩存服務器響應的最大Age值

cache-extension

 

新指令標記(token{-})

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3  public

共享、公開的緩存狀態,與private相反

Cache-Control: public

 

1.4  private

指定緩存對象,需要驗證

Cache-Control: private

 

1.5  no-cache

防止從緩存中返回過去的資源,請求中如包含該命令,表示客戶端不會接收緩存過的響應,必須向源放武器轉發請求

如果響應中包含該命令,那么緩存服務器不能對其資源進行緩存,且源服務器也將不在對緩存服務器請求中提出的資源有效性進行確認,且禁止其對相應資源進行緩存操作

Cache-Control: no-cache=Location

由服務器返回的響應報文首部字段中,若Cache-Control中對no-cache字段名具體制定參數值,那么客戶端在收到這個被指定參數值的首部字段對應的報文后,就不能緩存

換言之,無參數值的首部字段可以使用緩存,只能在響應中制定該參數

 

1.6  no-store

請求中包含機密信息,緩存不能在本地存儲請求或響應的任一部分k

Cache-Control: no-store

 

1.7  s-maxage

一般指代理服務器

與max-age指令相同,不同點在於s-maxage只適用於供多位用戶使用的公共緩存服務器

當使用該指令時,直接忽略對Expires首部字段及max-age指令的處理

Cache-Control: s-maxage=604800(單位:秒)

 

1.8  max-age

緩存資源緩存時間數值低於指定數值,就接受緩存的資源,如max-age為0,則需要請求源服務器

http1.1中,如遇到存在Expires首部字段的情況,會忽略Expires字段,優先處理max-age指令

Cache-Control: max-age=604800(單位:秒)

 

1.9  min-fresh

要求緩存服務器返回未過指定時間的資源

Cache-Control: min-fresh=60(單位:秒)

 

1.10  max-stale

規定緩存的有效期,如指令中沒有參數,則無論多久,客戶端都可以接受響應,如指定了參數,即使過了有效期,只要在指令的范圍內,客戶端都可以接受響應

Cache-Control: max-stale

 

1.11  only-if-cached

表示客戶端只在緩存服務器有對應資源的情況下才接受響應,若無,則返回504

Cache-Control: only-if-cached

 

1.12  must-revalidate

代理向客戶端返回響應前再次向源服務器確認資源的有效性,若無,則返回504,且該指令會忽略請求中的max-stale指令

Cache-Control: must-revalidate

 

1.13  proxy-revalidate

要求所有的緩存服務器在向客戶端返回響應之前再次向源服務器確認資源的有效性

Cache-Control: proxy-revalidate

 

1.14  no-transform

要求無論請求還是響應,都不能改變實體主體的媒體類型,防止緩存或者代理壓縮圖片等操作

Cache-Control: no-transform

 

2、Connection

該首部字段具備下面2個作用

1)控制不再轉發給代理的首部字段

Connection:不再轉發的字段名(即刪除后再轉發)

2)管理持久連接

http1.1默認都是持久連接,客戶端會在持久連接上持續發送請求,當服務器明確表示需要斷開連接時,則指明首部字段值為close

Connection: close

http1.1之前的版本默認都是非持久連接,需要在舊版本上保持持久連接,需要加入Keep-Alive指令

Connection-Keep-Alive

 

3、Date

表明創建http報文的日期和時間

目前http1.1版本使用如下格式的時間:

Date: Sun, 31 Jul 2016 01:28:48 GMT

 

4、Pragma

是http1.1之前的版本歷史遺留字段,僅作為與http1.0的向后兼容而定義,規范定義的形式唯一,如下所示

Pragma: no-cache

只用於客戶端發送的請求中,客戶端要求所有的中間服務器不返回緩存的內容

 

5、Trailer

事先說明在報文主體后記錄了哪些首部字段,可應用於http1.1版本分塊傳輸編碼時

 

6、Transfer-Encoding

規定報文主體的編碼方式

http1.1的傳輸編碼方式僅對分塊傳輸編碼有效

Transfer-Encoding: chunked

 

7、Upgrade

檢測http協議及其他協議是否可使用更高的版本進行通信,其參數值可用來指定一個完全不同的通信協議

客戶端請求:

GMT /index.htm HTTP/1.1

Upgrade: TLS/1.0

Connection: Upgrade

服務器響應:

HTTP/1.1 101 Switching Protocols

Upgrade: TLS/1.0, HTTP/1.1

Connection: Upgrade

上面的例子中,首部字段Upgrade指定的值為TLS/1.0,這里的兩個首部字段的對應關系,Connection的值被指定為Upgrade。

Upgrade對象僅限於客戶端和鄰近服務器之間,因此,使用首部字段Upgrade時,還需要額外指定Connection Upgrade

對於附有首部字段Upgrade的請求,服務器可以用101Switch Protocols狀態碼作為響應返回

 

8、Via

使用首部字段Via是為了追蹤客戶端與服務器間的請求和響應報文的傳輸路徑

Via不僅用於追蹤報文的轉發,還可避免請求回環的發生,因此,必須在經過代理時附加該首部字段內容

 

9、Warning

告知用戶與一些與緩存相關的問題的警告

Warning的首部格式如下,日期部分可省略

Warning:[警告碼] [警告的主機:端口號] "[警告內容]" ([日期時間])

http1.1中定義了7中警告,警告碼對應的警告內容僅供參考

另外,警告碼具備擴展性,今后有可能追加新的警告

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM