客户端如何知道应将哪些cookie发送到服务器

时间:2018-04-07 12:56:47

标签: http cookies request response

当我转到HTTPS server时,我可以在开发人员工具(或Fiddler)中看到客户端发送给服务器的请求Cookie 。但是,如果服务器没有发送响应cookie,客户端如何知道应该发送哪些cookie。至少我在Developer工具或Fiddler中看不到任何响应cookie。

2 个答案:

答案 0 :(得分:4)

首先,每个域在cookie jar / cookie商店中都有自己的cookie。每当浏览器向服务器发出请求时,该域或子域的商店中的所有cookie都将被发送到服务器。

安全Cookie与不安全Cookie

安全cookie仅在通过ssl(https协议)建立的连接上发送。普通cookie将在http和https协议上发送。

会话Cookie与持久性Cookie

  • 会话cookie - 只要浏览器会话打开,这些cookie就会一直存在。这意味着一旦您清除了缓存或关闭了浏览器,它们就会丢失。

  • 持久性cookie - 即使浏览器已关闭并再次打开,这些仍将持续存在,除非您已将浏览器设置为在退出时清除cookie,在这种情况下,它们的行为就像会话cookie一样。

第一方Cookie与第三方Cookie

  • 第一方Cookie - 由当前作为主文档打开的域生成 - 这意味着它们与浏览器中显示的域名相同。
  • 第三方Cookie - 由不同的域生成,然后由浏览器(在地址栏中)当前打开,但在iframe或各种资源调用(如css,脚本,媒体(图像,视频或其他嵌入媒体))内管理< / LI>

CORS - 通过xhttp ajax调用跨域调用 - 当您通过xhttp(ajax调用)创建域从另一个域请求资源时,会出现这种情况。在这种情况下,浏览器进行预检检查以查看接收域是否接受来自源域的查询(将源头发送到域以检查跨域策略)。服务器必须使用有效的选项标头进行响应,并且服务器可以允许标识数据,该标识数据是cookie数据的缩写。如果远程域已正确回答了允许您的域或“*”的“Access-Control-Allow-Origin”标头,那么您可以通过此请求发送cookie。这些行为就像普通电话一样。

要了解更多关于科尔斯的信息:

add comments to the file

答案 1 :(得分:0)

直接回答问题:客户端发送回所有路径的cookie数据。

如果您在任何HTTP响应中均未看到任何Set-Cookie标头,则可能是因为该cookie已由服务器发出并存储在计算机上在开始查看开发工具之前或提琴手。可能要花几天,几周甚至几个月的时间。

在Firefox中,如果您导航到about:preferences#privacy并单击管理数据,则可以看到哪些域已经发布了Cookie并存储在您的计算机上。 Firefox开发工具中的存储标签可以向您显示所有cookie的详细信息。 Cookie的到期时间由服务器使用Expires标头中的Max-AgeSet-Cookie指令来确定。

cookie如何首先在客户端计算机上结束

  1. 客户端向服务器发出第一个HTTP请求,例如GET www.example.com

  2. 服务器创建一个cookie,并在HTTP响应中将其发送回,例如响应头包含一行:Set-Cookie: sessionID=1234567; path=/; Max-Age=31536000

  3. 客户端收到HTTP响应,并将cookie存储在域www.example.com的“罐子”中。

服务器如何使用Cookie识别客户端

在对域www.example.com的后续HTTP请求中,客户端将与路径或子路径匹配的jar中的所有cookie发送回去。例如,客户端希望发出请求GET www.example.com/about,看到URL是域/www.example.com的子路径,因此它将cookie作为HTTP中的一行发送请求标头,即Cookie: sessionID=1234567

服务器看到cookie,并确切知道哪个客户端发出了此请求。