2015-04-02 86 views
1

我正在[site1] /script.js上[site2] /page.html使用script標記。 並且瀏覽器在請求JS文件時不發送cookie。爲什麼瀏覽器在請求JavaScript文件時不發送cookie?

響應頭:

HTTP/1.1 200 OK 
Server: nginx 
Date: Thu, 02 Apr 2015 14:45:38 GMT 
Content-Type: application/javascript 
Content-Length: 544 
Connection: keep-alive 
Content-Location: script.js.php 
Vary: negotiate,Accept-Encoding 
TCN: choice 
Set-Cookie: test_id=551d5612406cd; expires=Sat, 02-Apr-2016 14:45:38 GMT; path=/ 
Content-Encoding: gzip

請求頭 - 無餅乾:

GET /script.js HTTP/1.1 
Host: [site1] 
Connection: keep-alive 
Cache-Control: max-age=0 
Accept: */* 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 
Referer: [site2]/page.html 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: ru,en-US;q=0.8,en;q=0.6,sk;q=0.
+2

Cookie之間不共享(資源的類型無關緊要)。爲什麼你需要分享cookie? – Halcyon 2015-04-02 14:55:59

+2

因爲如果瀏覽器通過域名發送你的cookie,那麼沒有什麼能夠阻止nastycriminalsite.ru盜取你的localbank.com登錄cookie。 – 2015-04-02 14:57:05

+0

由於[同源政策](http://en.wikipedia.org/wiki/Same-origin_policy) – hindmost 2015-04-02 15:01:53

回答

1

對不起,這是我的錯。 Google Chrome屏蔽了第三方Cookie。

默認情況下,瀏覽器通過JavaScript文件請求發送Cookie。

3

瀏覽器請求JavaScript文件時,就像他們要求什麼都做時發送cookie。並且適用相同的規則:Cookie必須用於源/路徑。在你的例子中,你似乎使用了兩個不同的來源(site1site2),這可以解釋爲什麼你在請求中看不到cookie。

例如:我在設置cookie的服務器上設置了一個名爲test.php的頁面。然後它有鏈接到test2.html其中包括foo.js。這些都是相同的路徑(在我的例子中爲/,因爲我很懶,並沒有爲測試創建子目錄)。

在響應頭時,瀏覽器獲得test.php,我看到

 
Set-Cookie:test=123 

如果我然後單擊以test2.html,我看到這個請求頭爲test2.html

 
Cookie:test=123 

然後我請參閱foo.js的請求,並在該請求中看到:

 
Cookie:test=123 
相關問題