【发布时间】:2018-09-17 08:32:12
【问题描述】:
当我转到 HTTPS server 时,我可以在开发人员工具(或 Fiddler)中看到由客户端发送到服务器的 请求 cookie。但是,如果服务器没有发送响应 cookie,客户端如何知道应该发送哪些 cookie。至少我在开发者工具或 Fiddler 中看不到任何响应 cookie。
【问题讨论】:
标签: http cookies request response
当我转到 HTTPS server 时,我可以在开发人员工具(或 Fiddler)中看到由客户端发送到服务器的 请求 cookie。但是,如果服务器没有发送响应 cookie,客户端如何知道应该发送哪些 cookie。至少我在开发者工具或 Fiddler 中看不到任何响应 cookie。
【问题讨论】:
标签: http cookies request response
首先,每个域在 cookie 罐/cookie 存储中都有自己的 cookie。每当浏览器向服务器发出请求时,该域或子域的存储区中的所有 cookie 都会发送到服务器。
安全 cookie 与不安全 cookie
仅在通过 ssl(https 协议)建立的连接上发送安全 cookie。普通 cookie 将通过 http 和 https 协议发送。
会话 cookie 与持久性 cookie
会话 cookie - 只要浏览器会话打开,这些 cookie 就会一直存在。这意味着一旦您清除缓存或关闭浏览器,它们就会丢失。
持久性 cookie - 即使浏览器关闭并再次打开,这些也会持续存在,除非您将浏览器设置为在退出时清除 cookie,在这种情况下它们的行为就像会话 cookie。
第一方 cookie 与第三方 cookie。
CORS - 通过 xhttp ajax 调用进行跨域调用 - 当您创建一个域通过 xhttp(ajax 调用)从另一个域请求资源时,就会出现这种情况。在这种情况下,浏览器会进行预检以查看接收域是否接受来自源域的查询(源头被发送到域以检查跨域策略)。服务器必须以有效的选项标头进行响应,并且服务器可能允许身份数据是 cookie 数据的缩写。如果远程域使用允许您的域或“*”的“Access-Control-Allow-Origin”标头正确回答,则允许您通过此请求发送 cookie。这些行为就像正常调用一样。
要阅读有关 cors 的更多信息:
【讨论】:
直接回答这个问题:客户端发回它拥有的那个域和路径的所有 cookie数据。
如果您在任何 HTTP 响应中都没有看到任何 Set-Cookie 标头,这可能是因为 cookie 已由服务器发出并存储在您的计算机上在您开始查看开发工具或 Fiddler 之前 .可能是几天、几周甚至几个月前。
在 Firefox 中,如果您导航到 about:preferences#privacy 并单击 管理数据,您可以查看哪些域已经发布并存储在您的计算机上的 cookie。 Firefox 开发工具中的 存储 选项卡可以显示所有 cookie 的详细信息。 cookie 的到期时间由服务器确定,使用 Set-Cookie 标头中的 Expires 或 Max-Age 指令。
cookie 最初是如何在客户端计算机上结束的:
客户端向服务器发出第一个 HTTP 请求,例如GET www.example.com
服务器创建一个 cookie 并在 HTTP 响应中将其发送回,例如响应标头包含一行:Set-Cookie: sessionID=1234567; path=/; Max-Age=31536000
客户端收到 HTTP 响应并将 cookie 存储在域 www.example.com 的“jar”中。
服务器如何使用 cookie 来识别客户端
在随后对域www.example.com 的HTTP 请求中,客户端将jar 中与路径或子路径匹配的所有cookie 发回。例如,客户端希望发出请求GET www.example.com/about,看到URL是/在域www.example.com中的子路径,所以它把cookie作为HTTP请求头中的一行发送,即@987654333 @。
服务器看到 cookie 并确切知道是哪个客户端发出了这个请求。
【讨论】: