1. 程式人生 > 其它 >#web開發# 知道cookie hostonly屬性的請舉手。

#web開發# 知道cookie hostonly屬性的請舉手。

Cookie常見姿勢、疑難梳理

目前w3c定義瀏覽器存放每個cookie需要包含以下欄位:

cookie屬性 基本描述 舉例 備註
name=value cookie鍵值對 id=a3fWa
expires cookie過期時間 expires=Tue, 10-Jul-2013 08:30:18 GMT
secure 指定通過https請求傳送cookie Restrict access to cookies
httponly 指示是否允許通過JavaScript Document.cookie API訪問cookie Restrict access to cookies
domain 指定哪些主機可以接收cookie Domain=mozilla.org; 不設定則等於當前頁面domian Define where cookies are sent
path 指示哪些路徑的請求會發送cookie Path=/docs Define where cookies are sent
samesite 讓伺服器指定是否允許跨站請求傳送cookie SameSite=Lax Define where cookies are sent

cookie屬性之間用;連線;
多個cookie設定,使用多次Set-Cookieheader

HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: X-BAT-FullTicketId=TGT-969171-******;domain=bat.com; path=/; samesite=none; httponly

[page content]

第一方cookie、第三方cookie:
cookie與domian密切相關,如果cookie的domain屬性與你當前檢視的頁面的domain相同,cookie被稱為第一方cookie;
如果不同,則稱為第三方cookie, 第三方cookie通常用於廣告和使用者行為追蹤。

以上屬性決定了後續請求能否正常訪問cookie並攜帶cookie, 其中與cookie安全密切相關的三個屬性:

  • secure
  • httponly
  • samesite

這三個cookie屬性也是單點登入、跨域訪問常遇到的阻礙的技術突破點。

HostOnly Cookie是什麼鬼?

今天介紹一個不常見的cookie的屬性hostonly

,但是也曾給碼甲哥造成了一點阻礙。

① 這是一個不可手動修改的cookie屬性,類似 Sec-Fetch-、 Origin標頭,都是瀏覽器自動判斷並賦值。

② 判斷邏輯:

如果domain-attribute非空:如果規範化之後的request-host不匹配domain-attribute  
中的域名,那麼完全忽略掉cookie並且終止這些步驟;否則,將cookie的host-only-flag  
設定為false,並且將cookie的domain設定為domain-attribute。    
否則:將cookie的host-only-flag設定為true,並且將domain設定為規範化之後的request-host。

爬坑經歷

我當時在做一個 單點登入的時候,原意圖是: 設定cookie的domain屬性為父域名,向子域名請求時能自動攜帶cookie,
但事與願違,子域伺服器始終收不到cookie。

我堅信:

成熟的技術一定會有成熟的診斷姿勢!
成熟的技術一定會有成熟的診斷姿勢!
成熟的技術一定會有成熟的診斷姿勢!

Chrome瀏覽器開發者工具顯示:

疑點1:我的這個cookie在請求子域時被濾除了。

滑鼠懸停黑色感嘆號,顯示我這是一個hostonly cookie, 這就奇怪了,這個cookie的domain值也是正常的,但是多了一個hostonly屬性。

疑點2:在原種植cookie的響應流Set-Cookie header,這個cookie的domain鍵值對消失了。

圍觀我設定Cookie的錯誤程式碼:


結合hostonly的判斷邏輯, 我大概知道了。

大概就是我偷懶使用了單點登入的回撥地址'bat.com/home'作為domain屬性值,以為能自動解析出正常的domain。

實際上經歷了【響應流中的Set-Cookie header】---> 【hostonly判斷邏輯】, 事情已經失控了,解決問題的辦法也很明確,設定正確合法的domain屬性值,就不會出現後續的么蛾子,上線驗證有效。


許久未更,見諒!碼甲哥其實有很多內容想寫,時間有限,來日方長,與子同程。

本文記錄了某web站點上線生產遇到的跨站點無法攜帶cookie問題,

  • 全面梳理了Cookie的疑難姿勢
  • 順勢引出了hostonly這個有點意思的cookie屬性
  • 希望本次的爬坑經歷能給大家帶來一點幫助

本文來自部落格園,作者:{有態度的馬甲},轉載請註明原文連結:https://www.cnblogs.com/JulianHuang/p/15531617.html

歡迎關注我的原創高價值公眾號