Cookies 是否每个web请求都会发送浏览器cookie?

Cookies 是否每个web请求都会发送浏览器cookie?,cookies,Cookies,是否每个web请求都会发送浏览器的cookie 我说的不是页面浏览量,而是对图像、.js文件等的请求 更新 如果一个网页有50个元素,那就是50个请求。为什么它会为每个请求发送相同的cookie,难道它不缓存或知道它已经拥有它吗?是的,只要请求的URL位于cookie中定义的相同域和路径内(以及所有其他限制——安全、httponly、未过期等),那么cookie将为每个请求发送。是的。每个请求都发送属于同一域的cookie。它们不会被缓存,因为HTTP是无状态的,这意味着每个请求都必须足以让服务

是否每个web请求都会发送浏览器的cookie

我说的不是页面浏览量,而是对图像、
.js
文件等的请求

更新
如果一个网页有50个元素,那就是50个请求。为什么它会为每个请求发送相同的cookie,难道它不缓存或知道它已经拥有它吗?

是的,只要请求的URL位于cookie中定义的相同域和路径内(以及所有其他限制——安全、httponly、未过期等),那么cookie将为每个请求发送。

是的。每个请求都发送属于同一域的cookie。它们不会被缓存,因为HTTP是无状态的,这意味着每个请求都必须足以让服务器知道如何处理它。假设你的图像只能被某些用户访问;您必须随这50个请求中的每一个发送您的身份验证cookie,以便服务器知道它收到的请求池中是您而不是其他人或来宾

尽管如此,考虑到其他响应中提到的其他限制(如HTTPS设置、路径或域),可能不会发送cookie。特别是在这里,需要注意一件重要的事情:Cookie不会在域之间共享。这有助于减少对静态文件(如您提到的图像和脚本)的HTTP调用的大小。
示例:您在
www.stackoverflow.com
上有4个cookie;如果您向
www.stackoverflow.com/images/logo.png
发出请求,将发送所有这4个cookie。
但是,如果您请求
stackoverflow.com/images/logo.png
(注意子域更改)或
images.stackoverflow.com/logo.png
,则这4个cookie将不存在,但与这些域相关的cookie可能会存在


例如,您可以在此处阅读有关cookie和图像请求的更多信息。

正如其他人所说,如果cookie的主机、路径等限制得到满足,它将被发送50次

但你也问了为什么:因为cookies是HTTP特性,而HTTP是无状态的。HTTP设计为在服务器不存储请求之间的任何状态的情况下工作

事实上,服务器没有一种可靠的方法来识别哪个用户正在发送给定的请求;一个web代理(以及IP地址)背后可能有一千个用户。如果不是每个请求都发送cookie,服务器将无法知道哪个用户正在请求任何资源

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

3年过去了


浏览器不发送cookies还有另一个原因。您可以在
标记中添加
交叉源
属性,并将值添加到
“匿名”
。这将阻止Cookie发送到目标服务器。99.9%的情况下,您的Java脚本是静态文件,您不会根据请求的cookie生成js代码。如果你有1KB的cookie,并且你的页面上有200个资源,那么你的用户正在上传200KB的cookie,这可能需要在3G上花费一些时间,并且对结果页面没有任何影响。请访问以供参考。

我知道这是一个旧线程。但我刚刚注意到,如果添加一个尾随点,大多数浏览器不会为域发送cookie。例如
http://example.com.
将不会收到为
.example.com
设置的cookies。另一方面,Apache将它们视为同一主机。我发现这对我所包含的外部资源的跨域跟踪更加困难很有用,但出于性能原因,您也可以使用它。请注意,这会阻止验证
https
证书。我已经使用浏览器快照和我自己的设备运行了一些测试。除了safari(移动和桌面),黑客几乎可以在所有浏览器上使用,safari将在请求中包含cookie。

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


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

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

简短的答案是肯定的。以下几行来自


Cookie曾经用于一般客户端存储。当它们是在客户机上存储数据的唯一方法时,这是合法的,但现在建议使用现代存储API。Cookie会随每个请求一起发送,因此可能会降低性能(尤其是移动数据连接)

顺便说一句,这就是为什么像Google page speed或Yahoo的YSlow这样的页面速度工具建议从单独的,无cookie域。我在更新的回答中提到了从一个单独的域提供内容:当存在从Site1到Site2的HTTP重定向时,浏览器发送Site2 cookie是真的吗?我认为在这种情况下缓存是不可能的——我们说的是浏览器向服务器发送数据,而不是相反的方式。由于很多原因,在用户发送了一个请求之后,您不能确定服务器是否“已经拥有了它”。可能有大量的服务器彼此不通信;服务器可能根本不想(或没有空间)记住以前请求的任何内容——HTTP应该是无状态的;每个请求都应该独立于其他请求。出于这个原因,Cookie与身份验证凭据一样,必须随每个请求一起发送。我在更新我的答案时提到了为什么缓存对Cookie没有意义:HTTP 1.1是一种多路复用方案吗?也就是说,请求被捆绑到一个T中