每个Web请求都发送浏览器cookie吗?

mrb*_*lah 182 cookies

每个Web请求都发送了浏览器cookie吗?

我不是在谈论页面视图,而是对图像,.js文件等的请求.

更新 如果网页有50个元素,那就是50个请求.为什么它会为每个请求发送SAME cookie,它是否缓存或知道它已经拥有它?

Ian*_*and 177

是的,只要请求的URL位于cookie中定义的相同域和路径(以及所有其他限制 - 安全,httponly,未过期等),则会为每个请求发送cookie.

  • 顺便提一下,这就是Google Page Speed或雅虎YSlow等页面速度工具建议从单独的无cookie域提供静态内容的原因. (90认同)

der*_*ert 88

正如其他人所说,如果符合cookie的主机,路径等限制,它将被发送50次.

但你也问过为什么:因为cookie是一个HTTP功能,而HTTP是无状态的.HTTP旨在在没有服务器在请求之间存储任何状态的情况下工作.

事实上,服务器没有一种可靠的方法来识别哪个用户正在发送给定的请求; 单个Web代理后面可能有一千个用户(因此IP地址).如果每次请求都没有发送cookie,服务器将无法知道哪个用户正在请求任何资源.

最后,浏览器不知道服务器是否需要cookie,它只知道服务器指示它将任何请求的cookie发送到foo.com,所以它会这样做.有时图像需要它们(例如,每个用户动态生成),有时不需要,但浏览器无法分辨.


igo*_*s07 18

是.每个请求都会发送属于同一域的cookie.它们没有被缓存,因为HTTP是无状态的,这意味着每个请求必须足以让服务器弄清楚如何处理它.假设您拥有只能由特定用户访问的图像; 你必须向这50个请求中的每一个发送你的auth cookie,这样服务器就知道它是你而不是别人,或者是客户,它正在获得的请求池中.

话虽如此,鉴于其他响应中提到的其他限制,例如HTTPS设置,路径或域,可能不会发送cookie.特别需要注意的是:域之间不共享cookie.这有助于减少静态文件的HTTP调用大小,例如您提到的图像和脚本.
示例:您有4个cookie www.stackoverflow.com; 如果您提出请求www.stackoverflow.com/images/logo.png,将发送所有这4个cookie.
但是,如果您请求stackoverflow.com/images/logo.png(注意子域名更改)或者images.stackoverflow.com/logo.png那些4个cookie将不存在 - 但可能与这些域名相关的那些.

您可以在此StackOverflow博客文章中阅读有关cookie和图像请求的更多信息.


Ima*_*ghi 7

不。不是每个请求都发送cookie。这取决于cookie配置和客户端-服务器连接。

例如,如果您的cookie secure选项设置为,true则必须通过安全的HTTPS连接传输它。意味着当您看到具有HTTP协议的网站时,由于安全标记为true,浏览器将不会发送这些cookie。


neo*_*und 7

Cookie具有“路径”属性。如果“ path = /”,答案为是。


gil*_*ilm 6

3年过去了

浏览器不发送cookie的另一个原因.某些代码可能会使用object的crossOrigin属性来匿名,以防止发送cookie.

  • @Jake你可以在你的<script>标签中添加一个crossOrigin属性,并将值添加到"anonymous".这样可以防止将cookie发送到目标服务器.99.9%的时间,您的javascripts是静态文件,并且您不会根据请求的cookie生成该js代码.如果您有1KB的cookie,并且您的页面上有200个资源,那么您的用户正在上传200KB,这可能需要一些时间在3G上并且对结果页面没有任何影响.访问https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes以供参考. (4认同)