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

时间:2009-08-26 16:52:33

标签: cookies

每个网络请求都会发送浏览器的Cookie吗?

我不是在讨论网页浏览量,而是要求提供图片,.js文件等。

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

8 个答案:

答案 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随每个请求一起发送,因此它们可能会降低性能(尤其是对于移动数据连接而言)。