關於cookie domain中的點字首

2021-09-01 13:41:45 字數 995 閱讀 7128

今天同事遇到乙個問題,大概描述如下:

上面的描述就是:在.b.com這個一級網域名稱下,我們已經成功寫入了乙個cookie,假設為:b=level1。

在正常使用者的瀏覽行為中,應用a會向自己的域下寫入a=level2(domain:a.b.com)。

在a正常的頁面中,有些場景會有非同步的請求發出到b應用的頁面(用於獲取資料),合理的一種想法是:傳送到b應用的請求,應該攜帶著上面的b=level1,a=level2這兩個cookie資訊到b應用的伺服器去才對。但是,實際的情況是,b=level1被如願攜帶上來,但是a=level2這個資訊卻被丟棄了!(確切的說是沒有跟著request一起被傳送到b的服務端)。

為啥?在訪問子域應用時,不是父網域名稱下的cookie都應該被攜帶上來嗎?就像上面的b=level1那樣?

其實,關於這點,在cookie的rfc規範中,並沒有太明顯的說明,至少我沒有看到,即使又看了一遍rfc6265中關於domain matching的描述也是如此。

但實際的使用過程中,某個域下的cookie如果希望能夠被他的子域具有可見性(即可以讀取),必須要注意的一點是,應該保證這個cookie在被set的時候,應該以"."開頭。回到上面的例子,之所以a=level2這個cookie沒有在使用者瀏覽器請求b應用時被攜帶到b的server端,就是因為a=level2這個cookie的domain不是

.a.b.com

,而是a.b.com。

事實上,上面例子中的a應用,在向自己的網域名稱下寫入a=level2這個cookie時,壓根就沒有顯示的設定domain這個屬性,這樣一來,瀏覽器接受到這個set cookie的請求時,就會以預設以當前應用的網域名稱作為cookie的domain。(不過據說某些版本的firefox到是會自作聰明的在當前網域名稱的前面自動加上乙個點,這個待驗證!)

這乙個小點的區別,還是很容易被忽略的,不過產生的瀏覽行為還是有細微差別的。(涉及到cookie是否上傳,是否占用網路流量等)

ps:關於上面說到的那個問題,stackoverflow上的這個有個截圖,看著說明就直觀很多了。

python中關於Opencv中關於矩形的函式總結

最近處理影象,以前用的都是matlab,現在入手python比較慢,這幾天看到了很多命名和功能相似的函式,作個記錄總結一下 只是為了能夠看下函式知道它是做什麼的,因此不會對其用法說得面面俱到。看到乙個文章講得清晰詳實,分享一下 功能 計算輪廓內的面積 示例 輸入為乙個點集 contours 0 為前...

js中關於時間

1 獲取當前時間 var mydate new date mydate.getyear 獲取當前年份 2位 mydate.getfullyear 獲取完整的年份 4位,1970 mydate.getmonth 獲取當前月份 0 11,0代表1月 mydate.getdate 獲取當前日 1 31 m...

關於spring中propagation註解的問題

編寫業務邏輯方法 繼承hibernatedaosupport類,使用hibernatetemplate類持久化,hibernatetemplate 是hibernate session的封裝 預設的回滾是runtime exception 包括繼承runtimeexception的子類 普通異常不回...