2010-08-12 77 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