如何在HTTP协议中传递cookie?

jai*_*jai 240 cookies http

如何在HTTP协议中传递cookie?

dei*_*nst 286

服务器在其响应头中发送以下内容以设置cookie字段.

Set-Cookie:名称=

如果设置了cookie,则浏览器会在其请求标头中发送以下内容.

Cookie:名称=

有关更多信息,请参阅Wikipedia上的HTTP Cookie文章.

  • @PerlDev在[rfc2109](http://tools.ietf.org/html/rfc2109)中没有任何内容可以看出它不应该与GET/POST以外的请求一起使用,但我怀疑浏览器和在这些情况下,服务器实现可能无法实现它. (5认同)
  • 请注意,根据[RFC 2109](https://www.ietf.org/rfc/rfc2109.txt),如果用户代理或浏览器发送了多个cookie,它将把它们放在由分号分隔的单个字段中:`Cookie: name1 = value1; name2 = value2; ...` (3认同)

Dou*_*der 34

Cookie在请求(客户端 - >服务器)和响应(服务器 - >客户端)中作为HTTP标头传递.

  • 因此,在提出的任何请求中,所有 cookie 是否都已发送? (2认同)

Man*_*hit 31

除了在其他答案中写的内容之外,其他与cookie的路径,cookie的最大年龄,是否安全的细节也在Set-Cookie响应头中传递.例如:

Set-Cookie:名称= [ ; expires=日期 ] [ ; domain=域名 ] [ ; path=路径 ] [ ; secure]


但是,在发出下一个HTTP请求时,并非所有这些细节都会由客户端传递回服务器.

您还可以HttpOnly在Cookie的末尾设置标记,以便通过javascript代码在脚本中指示您的cookie是httponly且不允许访问.这有助于防止会话劫持等攻击.

有关更多信息,请参阅RFC 2109.另请参阅Nicholas C. Zakas的文章,HTTP cookies解释.

  • 这是 Zakas 文章的直接链接,而不是回溯链接:https://humanwhocodes.com/blog/2009/05/05/http-cookies-explained/ (2认同)

小智 13

创建示例脚本为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"
Run Code Online (Sandbox Code Playgroud)

然后制作可执行文件并像这样执行.

./resp | nc -l -p 12346
Run Code Online (Sandbox Code Playgroud)

打开浏览器并浏览URL:http:// localhost:1236 您将看到由浏览器发送的Cookie值

    [aaa@bbbbbbbb ]$ ./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

  • 如果有多个cookie怎么办?它们是用逗号隔开的吗? (3认同)
  • @MarkBuikema,请参阅https://docs.microsoft.com/zh-cn/windows/desktop/wininet/http-cookies。它们的发送方式如下:Cookie:<名称> = <值> [; <名称> = <值>] ... (2认同)