每个网络请求都会发送浏览器的Cookies吗?
我指的是图片、.js
文件等的请求,而不是页面访问。
更新 如果一个网页有50个元素,那就是50个请求。为什么它会为每个请求发送相同的cookie(s),难道它不会缓存或者已经知道了吗?
每个网络请求都会发送浏览器的Cookies吗?
我指的是图片、.js
文件等的请求,而不是页面访问。
更新 如果一个网页有50个元素,那就是50个请求。为什么它会为每个请求发送相同的cookie(s),难道它不会缓存或者已经知道了吗?
是的,只要所请求的URL在cookie中定义的相同域和路径内(并且所有其他限制条件 -- 安全、httponly、未过期等)保持不变,那么cookie将被发送给每个请求。
正如其他人所说,如果cookie的主机、路径等限制得到满足,它将被发送50次。
但你也问了为什么:因为cookie是HTTP的一个特性,而HTTP是无状态的。HTTP被设计成在请求之间不存储任何状态就可以工作。
事实上,服务器没有确定识别哪个用户发送了给定请求的明确方式; 在单个Web代理(因此IP地址)后面可能有数千个用户。 如果每个请求不发送cookie,服务器将无法知道请求某个资源的是哪个用户。
最后,浏览器无法确定服务器是否需要这些cookie,它只知道服务器指示它在发送到foo.com的任何请求中发送cookie。 有时图像需要它们(例如针对每个用户动态生成),有时不需要,但浏览器无法判断。
是的,每个请求都会发送属于同一域的cookie。由于HTTP是无状态的,它不会缓存cookie。这意味着每个请求必须足够让服务器知道如何处理它。例如,如果您有一些只允许特定用户访问的图像,则必须在这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可能存在。
您可以在这篇StackOverflow博客文章中了解更多关于cookie和图像请求的信息。
不是每个请求都会发送cookies,这取决于cookie的配置和客户端与服务器的连接。
例如,如果您的cookie的“secure”选项设置为“true”,则必须通过安全的HTTPS连接传输。也就是说,当您使用HTTP协议访问该网站时,因为`secure`标志为`true`,这些cookie将不会被浏览器发送。
已经过去了3年
浏览器不会发送cookie的另一个原因是您可以在<script>
标记中添加crossOrigin
属性,将值设置为"anonymous"
。这将防止将cookie发送到目标服务器。99.9%的情况下,您的JavaScript文件都是静态文件,您不会根据请求的cookie生成该JS代码。如果您有1KB的cookie,并且您的页面有200个资源,则用户上传了200KB,这可能需要一些时间在3G上,对结果页面没有任何影响。有关参考,请访问HTML属性:crossOrigin。
Cookie有一个“path”属性。如果“path = /”,答案是Yes。
/app/
或类似位置 - 这将保持可移植性,而无需使用单独的子域来消除冗余开销。或者您可以首先放弃现在无用的 Google Analytics。我见过如此之长的 cookie 标头,以至于我怀疑我的祖母是否在编织它们。 - Jakehttp://example.com.
不会接收设置为.example.com
的cookie。另一方面,Apache将它们视为相同的主机。我发现这很有用,可以使外部资源使用交叉域跟踪变得更加困难,但您也可以出于性能原因使用它。请注意,这会破坏https
证书的验证。我在browsershots和自己的设备上运行了几个测试。这个技巧对于除Safari(移动和桌面)之外的几乎所有浏览器都有效,后者将在请求中包含cookies。简短的回答是:是的。以下内容摘自JS文档
曾经使用Cookies来进行一般客户端存储。虽然当它们是在客户端上唯一的数据存储方式时,这种做法是合法的,但现在建议使用现代化的存储API。由于Cookie会随着每个请求一起发送,因此它们可能会恶化性能(特别是对于移动数据连接)。