为什么浏览器在提供初始文档请求时强制重新验证?

问题描述 投票:0回答:1

我确实了解

Cache-Control
标头的工作原理。但是,我注意到浏览器对待文档请求的方式与其他请求不同。这里的文档请求是当用户在地址栏上键入域并按 Enter 键时浏览器发出的第一个请求

我测试了一个 HTML 页面,响应头如下:

Cache-Control: public, max-age=31536000, immutable
标头告诉浏览器应将响应缓存 1 年。 

但是在案例文档请求中,Chrome 和 Firefox 无论如何都会重新验证它。证据就是304响应状态

这里是测试网址:

https://test-http-cache-2exijs7pxj7x.runkit.sh/

我找不到这种行为的官方文档。因此,如果有人能解释一下

浏览器如何缓存文档请求以及指的是官方文档

提前致谢!

html google-chrome caching browser-cache cache-control
1个回答
0
投票
您的浏览器仍会向服务器发送请求,这称为“条件 GET”

正如您在初始请求中看到的,您的请求中有一个标头,即“If-None-Match”

此标头用于根据分配给所请求资源的实体标签 (ETag) 执行条件 GET 请求。

浏览器发送该资源的 ETag,如果服务器上的资源具有相同的 ETag,则服务器会响应 304 Not Modified 状态码。指示浏览器应该使用其缓存的文档副本。如果文档已被修改,服务器会返回更新后的文档。

此过程称为重新验证...

我想知道您是否期望浏览器有不同的东西?

即使您的浏览器已经有页面的缓存副本,它仍然需要检查它所拥有的缓存副本是否是更新的......

如果你想完全绕过重新验证,那么你可以禁用 ETAG...并确保你的响应有

Last-Modified

Expires
 标头(我认为这是一个修复,如果没有,也许你可以更新测试你有网站,这样我可以做更多调查)

我希望有帮助...

© www.soinside.com 2019 - 2024. All rights reserved.