为了账号安全,请及时绑定邮箱和手机立即绑定

ETag vs标头过期

ETag vs标头过期

潇潇雨雨 2019-12-07 13:32:07
我环顾四周,但无法弄清楚是否应该同时使用ETag 和 Expires Header 或两者之一。我要做的是确保我的Flash文件(以及其他图像,以及不仅在这些文件发生更改时得到更新)。我不想做任何特别的事情,例如更改文件名或在URL的末尾添加一些奇怪的字符,以使其不被缓存。另外,我到底需要在PHP脚本中以编程方式来做些什么来支持这一点,还是全部都是Apache?
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

它们略有不同-ETag没有客户端可以用来确定将来是否再次请求该文件的任何信息。如果只有ETag,它将始终必须发出请求。但是,当服务器从客户端请求中读取ETag时,服务器可以确定是发送文件(HTTP 200),还是告诉客户端仅使用其本地副本(HTTP 304)。ETag基本上只是文件的校验和,当文件内容更改时,ETag在语义上也会更改。

客户端(和代理/缓存)使用Expires标头来确定它是否甚至根本不需要向服务器发出请求。您离Expires日期越近,客户端(或代理)从服务器向该文件发出HTTP请求的可能性就越大。

因此,您真正想做的就是使用BOTH标头-根据内容的更改频率将Expires标头设置为合理的值。然后配置要发送的ETag,以便客户端将请求发送到服务器时,它可以更轻松地确定是否将文件发送回。

关于ETag的最后一点说明-如果您在多台运行Apache的计算机上使用负载平衡的服务器设置,则可能需要关闭ETag生成。这是因为inode用作ETag哈希算法的一部分,这在服务器之间会有所不同。您可以将Apache配置为不将inode用作计算的一部分,但随后您要确保文件上的时间戳完全相同,以确保为所有服务器生成相同的ETag。


查看完整回答
反对 回复 2019-12-07
?
繁花如伊

TA贡献2012条经验 获得超12个赞

Expires并且Cache-Control是“强缓存头”

Last-Modified并且ETag是“弱缓存头”

首先,浏览器检查Expires/Cache-Control以确定是否向服务器发出请求

如果必须发出请求,它将发送Last-Modified/ETagHTTP请求。如果Etag文档的值与之匹配,则服务器将发送304代码而不是200,并且没有内容。浏览器将从其缓存中加载内容。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 415 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信