每个网络请求都会发送浏览器的Cookie吗?
我不是在讨论网页浏览量,而是要求提供图片,.js
文件等。
更新的 如果网页有50个元素,那就是50个请求。为什么它会为每个请求发送SAME cookie,不会缓存或知道它已经拥有它?
答案 0 :(得分:167)
是的,只要请求的URL在cookie中定义的相同域和路径(以及所有其他限制 - 安全,httponly,未过期等)持有,那么cookie将被发送给每个请求。
答案 1 :(得分:81)
正如其他人所说,如果符合cookie的主机,路径等限制,它将被发送50次。
但您也问过原因:因为Cookie是HTTP功能,而HTTP是无状态的。 HTTP旨在在没有服务器在请求之间存储任何状态的情况下工作。
实际上,服务器没有一种可靠的方法来识别哪个用户正在发送给定的请求;单个Web代理后面可能有一千个用户(因此IP地址)。如果每次请求都没有发送cookie,服务器将无法知道哪个用户正在请求任何资源。
最后,浏览器不知道服务器是否需要cookie,它只知道服务器指示它将任何请求的cookie发送到foo.com,所以它会这样做。有时图像需要它们(例如,每个用户动态生成),有时不需要,但浏览器无法分辨。
答案 2 :(得分:16)
是。每个请求都会发送属于同一域的cookie。它们没有被缓存,因为HTTP是无状态的,这意味着每个请求必须足以让服务器弄清楚如何处理它。假设您拥有只能由特定用户访问的图像;你必须向这50个请求中的每一个发送你的auth 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和图片的信息,例如,请参阅此StackOverflow Blog Post。
答案 3 :(得分:5)
3年过去了
浏览器不发送cookie的另一个原因。有些代码可能会使用object的crossOrigin属性来匿名,以防止发送cookie。
答案 4 :(得分:4)
没有。并非每个请求都会发送cookie。这取决于cookie配置和客户端 - 服务器连接。
例如,如果您的Cookie的secure
选项设置为true
,则必须通过安全的HTTPS连接进行传输。意味着当您看到具有HTTP协议的网站时,由于安全标志为真,因此浏览器不会发送这些cookie。
答案 5 :(得分:3)
我知道这是一个老线程。但我刚刚注意到,如果添加尾随点,大多数浏览器都不会为域发送cookie。例如,http://example.com.
无法接收为.example.com
设置的Cookie。另一方面,Apache将它们视为同一主机。我发现这对于我所包含的外部资源使跨域跟踪更加困难很有用,但出于性能原因,您也可以使用它。请注意,这会对https
证书进行制动验证。我使用了浏览器和我自己的设备运行了一些测试。除了safari(移动和桌面)之外,黑客几乎可以在所有浏览器上运行,其中包括请求中的cookie。
答案 6 :(得分:3)
Cookie具有“路径”属性。如果是“path = /”,答案是肯定的。
答案 7 :(得分:0)
最简单的答案是。以下几行来自JS documentation
Cookie曾经用于一般的客户端存储。虽然这是合法的,因为它们是在客户端上存储数据的唯一方法,但现在建议使用现代存储API。 Cookie随每个请求一起发送,因此它们可能会降低性能(尤其是对于移动数据连接而言)。