2010-01-16 54 views
5

設置cookie時,您將設置原始cookie數據和一些元數據。此元數據包含Cookie有效的路徑,Cookie的到期時間等。是否將Cookie「元數據」(expires,path,...)傳輸到服務器?

當瀏覽器執行請求時,瀏覽器會發送什麼?它會發送完整的cookie和所有的「元數據」嗎?或者只有cookie的實際數據,沒有元數據?

+0

您可能會發現提琴手(www.fiddler2.com)有用回答類似這樣的問題的一些行動。 – EricLaw 2010-01-17 17:11:05

+0

我運行OS X,但無論如何感謝:) – 2010-01-18 08:28:42

+0

您可以在OSX上使用Wireshark。 – 2011-01-24 23:59:29

回答

8

不只是cookie的值在隨後的請求中返回,其他元數據停留在客戶端上。

當您在服務器上定義一個cookie時,會在攜帶關於cookie的名稱,值和其他元數據的響應中創建一個Set-Cookie標頭。多個Cookie將在響應中創建多個Set-Cookie標題。

當瀏覽器發出後續請求時,它會檢查其可用cookie的「數據庫」,以查看哪些cookie適用於所請求的路徑。然後,它在請求中創建一個單一的Cookie標題,該標題僅包含一系列限定cookie的名稱/值對。

它對於嚴格控制cookie的數量和數據的大小非常重要,否則您可能會發現爲每個請求發送的cookie數據的權重可能會降低性能。如果元數據與cookie一起返回,情況會更糟糕。

0

如果Cookie設置爲RFC2965(通過Set-Cookie2標頭)並且該屬性是由服務器指定的,則用戶代理將重新傳輸路徑,域和端口屬性。的示例請求可能包含:

Cookie: $Version="1"; 
    name="val"; $Path="/site"; $Domain=".example.com"; $Port="81"; 
    name="val"; $Path="/site/dir"; $Domain=".example.com"; $Port="81" 

如果使用原來的Netscape Set-Cookie頭指定了的cookie,沒有任何屬性將被重新傳送。如果具有相同名稱(但路徑不同)的多個Cookie對請求有效,則會提供所有匹配的Cookie。一個例子請求:

Cookie: name=val; name=val2 

全規格是在這裏:

http://tools.ietf.org/html/rfc2965

原網景規範是在這裏:

http://web.archive.org/web/20070805052634/http://wp.netscape.com/newsref/std/cookie_spec.html

+0

Set-Cookie是返回Cookie定義的響應標頭,問題是有關發生其他請求時發送回服務器的內容。 – AnthonyWJones 2010-01-16 09:16:46

+0

「Set-Cookie2」標題 - 這是大多數瀏覽器都能理解的標準標題嗎? – 2010-01-16 09:43:09

+0

ie是的,歌劇是的,不確定關於ff。如果客戶端不支持它,服務器可以使用舊式Cookie。 – jspcal 2010-01-16 09:55:15

1

服務器使用「Set-Cookie」標頭設置cookie。這包含元數據(路徑和過期),如果指定的話。客戶端(瀏覽器)僅在Cookie文件頭中發送cookie本身。

Firebug是Firefox查看所有這些標題的有用工具。其他瀏覽器應該有類似的工具。

1

只有Cookie數據發送到服務器,其他元數據是瀏覽器執行如cookie到期

相關問題