摘要:今天同事遇到一個(gè)問(wèn)題,大概描述如下瀏覽器已經(jīng)接收指令,之前在一級(jí)域名下存儲(chǔ)了相關(guān)的信息。顯然是的一個(gè)子域。在正常用戶(hù)的瀏覽行為中,應(yīng)用會(huì)向自己的域下寫(xiě)入。
今天同事遇到一個(gè)問(wèn)題,大概描述如下:
瀏覽器已經(jīng)接收指令,之前在一級(jí)域名下存儲(chǔ)了相關(guān)的信息。這里為了簡(jiǎn)化問(wèn)題,假設(shè)我們有兩個(gè)應(yīng)用A和B,域名分別為:a.b.com和c.a.b.com。(顯然B是A的一個(gè)子域)。
上面的描述就是:在.b.com這個(gè)一級(jí)域名下,我們已經(jīng)成功寫(xiě)入了一個(gè)cookie,假設(shè)為:b=level1。
在正常用戶(hù)的瀏覽行為中,應(yīng)用A會(huì)向自己的域下寫(xiě)入a=level2(domain:a.b.com)。
在A正常的頁(yè)面中,有些場(chǎng)景會(huì)有異步的請(qǐng)求發(fā)出到B應(yīng)用的頁(yè)面(用于獲取數(shù)據(jù)),合理的一種想法是:發(fā)送到B應(yīng)用的請(qǐng)求,應(yīng)該攜帶著上面的b=level1,a=level2這兩個(gè)cookie信息到B應(yīng)用的服務(wù)器去才對(duì)。但是,實(shí)際的情況是,b=level1被如愿攜帶上來(lái),但是a=level2這個(gè)信息卻被丟棄了?。ù_切的說(shuō)是沒(méi)有跟著request一起被發(fā)送到B的服務(wù)端)。
為啥?在訪(fǎng)問(wèn)子域應(yīng)用時(shí),不是父域名下的cookie都應(yīng)該被攜帶上來(lái)嗎?就像上面的b=level1那樣?
其實(shí),關(guān)于這點(diǎn),在cookie的RFC規(guī)范中,并沒(méi)有太明顯的說(shuō)明,至少我沒(méi)有看到,即使又看了一遍RFC6265中關(guān)于Domain Matching的描述也是如此。
但實(shí)際的使用過(guò)程中,某個(gè)域下的cookie如果希望能夠被他的子域具有可見(jiàn)性(即可以讀?。?,必須要注意的一點(diǎn)是,應(yīng)該保證這個(gè)cookie在被Set的時(shí)候,應(yīng)該以"."開(kāi)頭。回到上面的例子,之所以a=level2這個(gè)cookie沒(méi)有在用戶(hù)瀏覽器請(qǐng)求B應(yīng)用時(shí)被攜帶到B的server端,就是因?yàn)?b>a=level2這個(gè)cookie的domain不是.a.b.com,而是a.b.com。
事實(shí)上,上面例子中的A應(yīng)用,在向自己的域名下寫(xiě)入a=level2這個(gè)cookie時(shí),壓根就沒(méi)有顯示的設(shè)置domain這個(gè)屬性,這樣一來(lái),瀏覽器接受到這個(gè)Set Cookie的請(qǐng)求時(shí),就會(huì)以默認(rèn)以當(dāng)前應(yīng)用的域名作為cookie的domain。(不過(guò)據(jù)說(shuō)某些版本的Firefox到是會(huì)自作聰明的在當(dāng)前域名的前面自動(dòng)加上一個(gè)點(diǎn),這個(gè)待驗(yàn)證!)
這一個(gè)小點(diǎn)的區(qū)別,還是很容易被忽略的,不過(guò)產(chǎn)生的瀏覽行為還是有細(xì)微差別的。(涉及到cookie是否上傳,是否占用網(wǎng)絡(luò)流量等)
PS:關(guān)于上面說(shuō)到的那個(gè)問(wèn)題,stackoverflow上的這個(gè)有個(gè)截圖,看著說(shuō)明就直觀很多了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104913.html
摘要:假設(shè)有兩個(gè)域名域名域名域名有分級(jí)的概念,也就是說(shuō)域名與域名都是的子域名,又是的子域名在域名所使用的服務(wù)中,可以設(shè)置域名在服務(wù)端設(shè)置的時(shí)候,設(shè)置為或沒(méi)有區(qū)別,注意前面的點(diǎn),即只要是為顯式的聲明,前面帶不帶點(diǎn)沒(méi)有區(qū)別。 1 Cookie簡(jiǎn)介 Cookie是由W3C組織提出,最早由NetScape社區(qū)發(fā)展的一種機(jī)制。Cookie是存儲(chǔ)于訪(fǎng)問(wèn)者的計(jì)算機(jī)中的變量。每當(dāng)同一臺(tái)計(jì)算機(jī)通過(guò)瀏覽器請(qǐng)求某...
摘要:假設(shè)有兩個(gè)域名域名域名域名有分級(jí)的概念,也就是說(shuō)域名與域名都是的子域名,又是的子域名在域名所使用的服務(wù)中,可以設(shè)置域名在服務(wù)端設(shè)置的時(shí)候,設(shè)置為或沒(méi)有區(qū)別,注意前面的點(diǎn),即只要是為顯式的聲明,前面帶不帶點(diǎn)沒(méi)有區(qū)別。 1 Cookie簡(jiǎn)介 Cookie是由W3C組織提出,最早由NetScape社區(qū)發(fā)展的一種機(jī)制。Cookie是存儲(chǔ)于訪(fǎng)問(wèn)者的計(jì)算機(jī)中的變量。每當(dāng)同一臺(tái)計(jì)算機(jī)通過(guò)瀏覽器請(qǐng)求某...
摘要:可選的最長(zhǎng)有效時(shí)間,格林尼治標(biāo)準(zhǔn)時(shí)間。如果不傳表示這是一個(gè)會(huì)話(huà)期。默認(rèn)值為當(dāng)前文檔訪(fǎng)問(wèn)地址的主機(jī)名不包含子域名。設(shè)置的目錄及其子目錄都生效。可選設(shè)置了屬性的不能使用經(jīng)由屬性和進(jìn)行訪(fǎng)問(wèn)以防范跨站腳本攻擊。 問(wèn)題 描述 先看下后臺(tái)返回的Set-Cookie字段:showImg(https://segmentfault.com/img/bVbulhz?w=858&h=128);查看瀏覽器Co...
摘要:背景是一種無(wú)狀態(tài)的協(xié)議,它不對(duì)請(qǐng)求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存,即無(wú)法根據(jù)之前的狀態(tài)進(jìn)行本次請(qǐng)求的處理。為了保留無(wú)狀態(tài)協(xié)議這個(gè)特征的同時(shí)又要解決類(lèi)似的矛盾問(wèn)題,于是引入了。主要目的是為防止跨站腳本攻擊對(duì)的信息竊取。 需求場(chǎng)景 一個(gè)Vue單頁(yè)應(yīng)用,A、B、C 三個(gè)頁(yè)面都引用了一個(gè)公用的時(shí)間選擇器。用戶(hù)在各自頁(yè)面選擇完時(shí)間后,A,B,C頁(yè)面互相切換時(shí)保存選擇的時(shí)間,在關(guān)閉瀏覽器tab后,清...
摘要:背景是一種無(wú)狀態(tài)的協(xié)議,它不對(duì)請(qǐng)求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存,即無(wú)法根據(jù)之前的狀態(tài)進(jìn)行本次請(qǐng)求的處理。為了保留無(wú)狀態(tài)協(xié)議這個(gè)特征的同時(shí)又要解決類(lèi)似的矛盾問(wèn)題,于是引入了。主要目的是為防止跨站腳本攻擊對(duì)的信息竊取。 需求場(chǎng)景 一個(gè)Vue單頁(yè)應(yīng)用,A、B、C 三個(gè)頁(yè)面都引用了一個(gè)公用的時(shí)間選擇器。用戶(hù)在各自頁(yè)面選擇完時(shí)間后,A,B,C頁(yè)面互相切換時(shí)保存選擇的時(shí)間,在關(guān)閉瀏覽器tab后,清...
閱讀 1188·2021-11-23 10:10
閱讀 1522·2021-09-30 09:47
閱讀 905·2021-09-27 14:02
閱讀 2981·2019-08-30 15:45
閱讀 3027·2019-08-30 14:11
閱讀 3621·2019-08-29 14:05
閱讀 1829·2019-08-29 13:51
閱讀 2212·2019-08-29 11:33