我环顾四周,但无法弄清楚是否应该同时使用 ETag 过期标头 或者 非此即彼。

我想做的是确保我的 Flash 文件(以及其他图像以及其他文件)不仅在这些文件发生更改时得到更新。

我不想做任何特殊的事情,例如更改文件名或在网址末尾添加一些奇怪的字符以使其不被缓存。

另外,我是否需要在 PHP 脚本中以编程方式执行任何操作来支持此功能,还是全部都是 Apache?

有帮助吗?

解决方案

他们是略有不同 - ETag的没有任何信息,客户端可以使用,以确定是否要在未来再次让该文件的请求。如果ETag的是所有它,它总是不得不做出请求。然而,当服务器从客户端请求读取的ETag,服务器可再确定是否要发送的文件(HTTP 200),或者告诉客户端只使用自己的本地副本(HTTP 304)。一个ETag基本上只是对于语义改变的文件变化时,内容的文件的校验和。

Expires头被用于由客户端(和代理/高速缓存),以确定它是否甚至需要向服务器的请求的。您越接近到过期日期,越有可能是在客户端(或代理)将使从服务器文件的HTTP请求。

所以,你真正想要做的是使用这两种头 - 设置基于多久内容的变化Expires头到一个合理的值。然后,配置ETag来发送,使得当客户端DO发送到服务器的请求时,它可以更容易地确定是否将文件发送回来。

有关ETag的最后一个音符 - 如果你正在使用负载均衡服务器设置了多个机器上运行的Apache你可能会想关闭ETag的产生。这是因为i节点用作ETag的哈希算法,这将是在服务器之间不同的部分。你可以配置Apache不使用索引节点作为计算的一部分,但随后你会希望确保对文件的时间戳是完全一样的,保证同一的ETag获取所有服务器生成的。

其他提示

的Etag 上次修改标头是的验证

他们帮助浏览器和/或高速缓存(反向代理),以了解如果一个文件/页面,已经改变了,即使它保留了相同的名称。

到期缓存控制是给的刷新信息

这意味着,他们告知,浏览器和反向在中间代理,到什么时间或持续多久,他们可以让网页/文件在其缓存。

所以,问题通常为一个验证器使用哪个,ETAG或最后一次修改,并且该刷新信息来源头使用,期满或缓存控制。

ExpiresCache-Control “强缓存头”

Last-ModifiedETag “弱缓存头”

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

如果必须做出的请求时,它会在HTTP请求发送Last-Modified/ETag。如果文档的Etag值匹配,服务器会发送一个304代码,而不是200,没有内容。浏览器将来自其高速缓冲存储器加载的内容。

另一个总结:

您需要同时使用两者。ETag 是“服务器端”信息。过期是“客户端”缓存。

  • 使用 电子标签 除非您有负载平衡的服务器。它们是安全的,并且会让客户知道每次您更改某些内容时他们应该获取服务器文件的新版本。

  • 过期 必须谨慎使用,如果你设置了一个很远的到期日期,但想立即更改其中一个文件(例如JS文件),有些用户可能要很长时间才能得到修改后的版本!

我想提一些问题的答案可能已经错过了一个额外的事情是缺点在你的头两个ETagsExpires/Cache-control

根据您的需求很可能只是添加额外的字节在头这可能会增加数据包,这意味着更多的TCP开销。再次,你应该看到,如果在你的头有两件事的开销是必要还是会只是添加额外的重量在您的要求从而降低性能。

您可以阅读更多关于它由凯尔·辛普森这个优秀的博客文章: http://calendar.perfplanet.com/2010/bloated-request-response-headers/

在我的视图,其中过期接头,服务器可以通知客户端我的数据将是陈旧,同时用的Etag,服务器将检查ETag值对于客户的每个请求。

的ETag被用于确定资源是否应该使用副本之一。和Expires像缓存控制头被告知客户端高速缓存十年前,客户端应取本地资源。

在现代网站,经常有提供一个名为散列文件,像app.98a3cf23.js,所以这是一个很好的做法,使用Expires头。除此之外,它也降低网络的费用。

希望它能帮助;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top