我正在开发一个 Python 程序来从网络上抓取数据,在从网站请求页面时,我检查了标头字段,它包含所有其他字段,例如服务器、通过、日期等,但大多数网站响应不包含“Last-Modified”字段?这背后的原因是什么?
答案1
可能是为了这个原因:
如果删除 Last-Modified 和 ETag 标头,您将完全消除 If-Modified-Since 和 If-None-Match 请求及其 304 Not Modified 响应,因此文件将保持缓存状态而无需检查更新,直到 Expires 标头指示新内容可用!
通过从静态文件(图像、javascript、css)中删除 ETag 标头和 Last-Modified 标头,浏览器和缓存将无法验证文件的缓存版本与真实版本。通过同时包含 Cache-Control 标头和 Expires 标头,您可以指定某些文件在特定时间段内缓存,然后您就可以神奇地(我保证这是一个非常独特的技巧)消除任何验证请求!
标ETag
头只是一个唯一的代码(通常是哈希值),浏览器可以检查它来查看资源是否已发生变化。
因此,通过不包括此标题或 ETag
,但包括Expires
和Cache-Control
标题:
- 浏览器将使用其缓存副本,直到标头中的持续时间
Expires
过去 - 并且也不会发送验证请求(我认为这些是
HEAD
获取标题以检查更新Last-Modified
日期的请求)来检查修改状态。
让浏览器不再发送验证请求,而只是在未来使缓存的副本无效,从而减少 HTTP 请求并提高网络服务器的性能,这对于面向整个互联网的服务器来说非常重要,因为它们会受到机器人和抓取工具等的攻击。