就是雙方都會用到的字串。
Cache-Control: private, max-age=0, no-cache
操作緩存的工作,多個指令可以透過逗點分隔。
客戶端:請求緩存
伺服端:控制緩存資料
表示其他用戶可以利用緩存。
Cache-Control: public
與 public 相反,只回應資料給特定用戶,其他人則不會回傳資料。
Cache-Control: private
Cache-Control: no-cache
為了防止從緩存資料裡面回傳過期的資料。
如果客戶端有包含 no-cache 指令,則表示客戶端不會接受緩存過的回應,因此必須把客戶端的請求轉發到來源伺服器。
如果伺服端有包含 no-cache 指令,則緩存伺服器不能對資料進行緩存,瀏覽器以後也不能再對緩存伺服器請求中提出資料是否有效的確認,也禁止對回應資料做緩存。
Cache-Control: no-cache=Location
由伺服端回傳的回應中,訊息中的 header 的 Cache-Control 如果在 no-cache 字串指定參數,客戶端在接收這個被指定的參數值所對應的回應訊息後,就不能進行緩存,換句話說就是沒有參數值的 header 字串可以進行緩存。
Cache-Control: no-store
當使用這個指令,暗示這段通訊(請求或回應)包含機密訊息。
有些人以為no-cache
是不緩存,但其實是不緩存過期資源,而no-store
才是真的不緩存。
因此這個指令規定不能在本地儲存請求或回應中的任何一部份。
Cache-Control: s-maxage=604800(秒)
這個指令和等等要介紹的max-age
指令一樣,差別在於s-maxage
只適合給多個使用者使用的公共緩存伺服器,換句話說對於單一使用者重複回應的伺服器來說這個指令是沒用的。
另外使用這個指令會忽略Expires
指令和max-age
指令。
Cache-Control: max-age=604800(秒)
當客戶端發出的請求有這個指令,如果判定緩存資料的緩存時間比指定的時間數更小,那麼客戶端就會接收緩存的資源,如果指定數值是 0,那緩存伺服器就會把請求轉給來源伺服器。
當伺服器回傳的回應有這個指令,緩存就不會確認資料是否還具有有效性,而這個指令的數值是代表這個資料能夠緩存的最長時間。
HTTP / 1.1 版本的緩存服務遇到同時存在Expires
指令的情快,會優先處理max-age
指令,而忽略Expires
指令,但 HTTP / 1.0 則完全相反。
Cache-Control: min-fresh=60(秒)
這個指定是指說當發出請求後,指定的時間過後的資料都沒辦法再進行回應。
以上述來說min-fresh=60
是指過超過了 60 秒的資料都沒辦法當作回應回傳。
Cache-Control: max-stale=360(秒)
使用這個指令就算資料已經過期了,還是可以進行緩存。
如果指令中沒有參數,則表示不管資料過期多久,客戶端都會收到回應;如果有具體數字,那個即使過期,只要在這個指定的時間內,仍然會被客戶端所接收。
Cache-Control: only-if-cached
使用這個指令意思是發生請求後,緩存伺服器會不斷載入來源伺服器的回應,也不會重複確認資料的有效性,如果發生請求緩存伺服器,而緩存伺服器的本地沒有來源伺服器給的資料,就會發出 504。
使用這個指令,代理會向來源伺服器再驗證要回傳的回應緩存資料是否有效,如果代理無法透過來源伺服器再次拿到有效的資料,那麼代理就會回傳 504 給客戶端。
另外使用這個指令也會忽略max-stale
的請求。
這個指令意思是,如果客戶端傳出帶有這個指令的請求,那麼緩存伺服器在回傳回應資料前,要先再驗證資料的有效性。
使用這個指令無論在請求或是回應,緩存都不能改變實體的媒體類型,這樣可以防止緩存或代理壓縮圖片等等。
Cache-Control: private, community="UCI"
Connection header 字串有兩個功能:
Connection: Keep-Alive
Http / 1.1 之前的版本默認連結都不是持久連結,所以需要指定 Connection 是 Keep-Alive。
建立 HTTP 訊息的時間和日期,1.1 的版本使用 RFC1123 規定的日期時間格式:
Date: Tue, 03 Jul 2012 04:40:59 GMT
Pragma 是為了向後兼容而存在,它只支援 HTTP/1.0 的緩存伺服器,因為當時 HTTP / 1.1 的 Cache-Control 還沒有支援。
雖然是通用 header ,但只用在客戶端發送的請求,客戶端會要求所有中介的伺服器不回傳緩存資料。
如果都使用 HTTP / 1.1 版本,那直接使用Cache-Control: no-cache
是最好,但仍有些無法版本沒有支援,所以發送的請求最好如下:
Cache-Control: no-cache
Pragma: no-cache
Trailer 的作用是讓發送端在分塊發送的訊息後面增加其他訊息。
Transfer-Encoding 的作用是規定傳送的 HTTP 訊息是採用哪個編碼方式。
這個字串是用來檢測 HTTP 協議與其他協議是否可以用更新的版本來通訊,參數可以用來指定不同的通訊版本。
Connection: Upgrade
Upgrade: TLS/1.0
Connection 要設定為 Upgrade,才能使用 Upgrade 字串。
Via 是為了要追蹤客戶端與伺服端之間的請求(回應)的 HTTP 訊息傳輸路徑而存在,另外還能避免回環的狀況。
當訊息經過代理或閘道,會加上 Via header,再進行轉發,這個和 traceroute 與 Received header 的工作模式很像。
通常使用 Via 會和 Trace 方法一起使用,例如代理伺服器收到 Trace 方法(Max-Forwards: 0)傳來的請求,代理就不能再轉發這個請求,如此代理會把自己的訊息加上 Via header 再回傳請求要求的回應。
這個字串會告知使用者一些與緩存相關的問題警告,HTTP 1.1 制定了七種警告,警告具有擴展性,未來還有可能再新增。
資料來源:《圖解 HTTP》 上野宣 人民郵電出版社
筆記純屬推廣及分享,如有侵權,請告知。
Please advise to remove immediately if any infringement caused.