目錄
一、Cookie相關
1、Set-Cookie 和 Cookie
響應頭字段:Set-Cookie
請求頭字段:Cookie
請求過程:當客戶端第一次與服務器通信時,服務器會爲這個客戶端創建一個身份標識(key=vaule),放進Set-Cookie字段裏,隨着響應報文一起傳給客戶端。客戶端發現響應報文裏有Set-Cookie這個字段,就將key=value值保存起來。當第二次這個客戶端再與服務器通信時,就會用Cookie字段帶着key=value值去請求服務,服務器就能直接識別客戶端的身份。
服務器可一次設置多個Cookie值:
實例:
響應報文:
Set-Cookie:a = xxx
Set-Cookie:b = xxx
請求報文:
Cookie:a = xxx;b = xxx
2、Cookie常見的屬性值
1)Cookie的生命週期
Expires:過期時間,絕對時間點,可理解爲“截止時間”;
Max-Age:相對時間,單位是秒;
注意:兩者同時出現,優先採取Max-Age
2)Cookie的作用域
使瀏覽器僅發送給特定的服務器和URI,防止信息盜用。
Domain:域名
Path:路徑
3)Cookie的安全性
HttpOnly:此Cookie只通過瀏覽器HTTP傳輸協議傳輸;
SameSite:防範“跨站請求僞造”攻擊
示例:
SameSite = Strict -> Cookies不隨連接跳轉跨站發送;
SameSite = Lax -> 允許GET/HEAD,不允許POST;
Secure:Cookie僅能用HTTPS協議傳輸加密傳輸,明文的HTTP協議會禁止發送。
二、Cache 緩存相關報文字段
1、瀏覽器請求數據及使用Cache的過程
step1:瀏覽器發現緩存無數據,於是發送請求,向服務器獲取資源;
step2:服務器響應請求,返回資源,同時標記資源的有效期;
step3:瀏覽器緩存資源,等待下次重用。
2、Cache-Control相關字段
1)Cache-Control在響應報文中
響應報文,資源的有效時間,單位秒。
示例:
Cache-Control:max-age = 30 -> 這個頁面只能緩存30秒
注意:max-age是從報文創建之時就開始計算時間,包含再鏈路中傳輸的時間。但是Cookie的生命週期是響應報文到達客戶端開始計算。
2)其他屬性
no-store : 不允許緩存,用於變化非常頻繁的數據。
no-cache:允許緩存,但使用前必須驗證是否過期,是否有最新的版本。
nust-revalidate:緩存不過期就可以使用,過期瞭如果還想用就必須去服務器驗證。
3)Cache-Control在請求報文中
可以表示向服務器請求一個最新的的數據版本。
示例:
Cache-Control : max-age = 0
或
Cache-Control : no-cache
三、緩存數據更新
1)請求過程
在請求頭中添加一些字段,請求服務器進行判斷緩存是否過期,若過期則重新發送數據,沒過期則不用發送。
2)相關字段
響應字段:
ETag:資源的唯一標識。
在客戶端與服務器第一次就某個資源進行通信時,響應報文裏提供。
Last-modified:文件的最後修改時間。
在客戶端與服務器第一次就某個資源進行通信時,響應報文裏提供。
請求字段:
If-Modified-Since:詢問服務器資源是否發生變化。與Last-Modified搭配。
If-None-Match:詢問服務器資源是否能夠匹配。與ETag搭配。
其他字段:
If-Match 、 If-Range 、 If-Unmodified-Since
3)狀態碼
304 Not Modified
參考資料:
1.《HTTP權威指南》
2.極客時間-《透視HTTP協議》專欄-羅劍鋒