2010-08-12 75 views
177

Cookie是如何在HTTP協議中傳遞的?Cookie如何在HTTP協議中傳遞?

+9

最佳概述送我讀過這是這一個Zakas cookie值:HTTP:// WWW。 nczonline.net/blog/2009/05/05/http-cookies-explained/ – 2012-08-02 14:15:02

回答

222

服務器在其響應頭中發送以下內容來設置cookie字段。

Set-Cookie:名稱=

如果有一個Cookie組,則該瀏覽器發送在其請求頭下面。

Cookie:=

看到維基百科的文章HTTP Cookie更多信息。

+0

這個cookie只適用於GET/POST動詞而不是CONNECT嗎? – PerlDev 2012-07-12 13:10:50

+5

@PerlDev我在[rfc2109](http://tools.ietf.org/html/rfc2109)上看不到任何東西,它說它不應該與GET/POST以外的請求一起工作,但我懷疑瀏覽器在這些情況下服務器實現可能不會實現它。 – deinst 2012-07-12 15:02:47

21

Cookie在請求(客戶端 - >服務器)和響應(服務器 - >客戶端)中都作爲HTTP標頭傳遞。

+0

是的,他們是通過標題,多數民衆贊成它(^ .. ^) – 2017-05-24 10:29:13

+0

所以在任何請求,是所有的cookie ipso事實上發送? – BKSpurgeon 2018-02-07 00:19:13

20

除了它在其他答案中寫的內容之外,其他與Cookie路徑,Cookie最大年齡有關的詳細信息,以及它是否安全也在Set-Cookie響應標頭中傳遞。例如:

Set-Cookie:= [; expires=日期] [; domain=] [; path=路徑] [; secure]


然而,並非所有的這些細節當進行下一個HTTP請求時,由客戶端傳回服務器。

您還可以在cookie的末尾設置HttpOnly標誌,以表明您的cookie是httponly並且不允許被javascript代碼腳本訪問。這有助於防止會話劫持等攻擊。

欲瞭解更多信息,請參閱RFC 2109。還可以看看 Nicholas C. Zakas的文章,HTTP cookies explained

12

創建示例腳本爲RESP:

#!/bin/bash 

http_code=200 
mime=text/html 

echo -e "HTTP/1.1 $http_code OK\r" 
echo "Content-type: $mime" 
echo 
echo "Set-Cookie: name=F" 

然後做出可執行文件並執行這樣的。

./resp | nc -l -p 12346 

打開的瀏覽器和瀏覽網址:http://localhost:1236 你會看到這是由瀏覽器

 
    [[email protected] ]$ ./resp | nc -l -p 12346 
    GET/HTTP/1.1 
    Host: xxx.xxx.xxx.xxx:12346 
    Connection: keep-alive 
    Cache-Control: max-age=0 
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
    Upgrade-Insecure-Requests: 1 
    User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 
    Accept-Encoding: gzip, deflate, sdch 
    Accept-Language: en-US,en;q=0.8,ru;q=0.6 
    Cookie: name=F 
+1

如果有多個cookie會怎麼樣?他們是用逗號隔開的嗎? – 2017-05-15 21:50:27

+0

認爲它們被設置爲新的cookie。 Cookie:name = F Cookie:name = A – Fix3r 2017-10-26 08:59:35