标签: etags

yslow 说 etags 配置错误。如何在 IIS7 上正确配置 etags?

在我支持的网站上运行 ySlow,我注意到它报告说网站图像的 etags 配置错误(例如 *.jpg、*.png、*.gif)。任何人都可以帮助解释我必须做什么才能让 IIS7 正确发布这些 etags 吗?

iis-7 performance-tuning etags yslow

20
推荐指数
3
解决办法
4万
查看次数

什么时候应该使用和不使用 Etags?

我只是在WebPageTest.org上查看我们的网站,他们对加快网站速度的建议之一是:

通常不应使用 ETag 标头,除非您有明确的理由需要它们

我想知道这是什么意思。这是否意味着您知道不会更改的静态内容不应该包含它们,或者这是否意味着您知道将定期更改的内容不应该包含它们,或者是否意味着您不应该普遍使用它们,除非您有具体需要。

如果是后者,什么时候使用它们合适?

optimization web-server web etags page-speed

10
推荐指数
1
解决办法
3692
查看次数

哪些反向代理支持 HTTP/1.1 ETag 和 If-None-Match 标头?

我正在为电子商务平台开发一个缓存系统,该系统将使用反向代理进行缓存。我计划通过使用正确的 HTTP/1.1 标头来处理失效。也就是说,我将在第一代内容上设置一个 ETag,并在应用程序中缓存该 ETag 值。Cache-Control 标头将指定“必须重新验证”,因此代理应在带有 ETag 的后续请求上设置 If-None-Match 标头。应用程序将查找缓存的 ETag 值,如果匹配将发送 304 响应,否则将生成完整的 200 响应。

我希望使用 nginx,但我不能确定它是否支持 ETag(文档表明它不支持,但也许它们已经过时了?)。清漆是另一种选择,但我在这里也不乐观..

哪些反向代理服务器完全支持 ETag?我希望它能够真正缓存多个版本,这样我就可以在不必禁用缓存的情况下进行拆分测试之类的操作。也就是说,HTTP/1.1 指定客户端可以发送带有多个 ETag 值的 If-None-Match,服务器应响应匹配的 ETag(如果有)。如果反向代理保留多个副本而不仅仅是最后看到的值,并让服务器在每个请求上指定要使用的值,那将是理想的。

http nginx varnish reverse-proxy etags

8
推荐指数
1
解决办法
7317
查看次数

Nginx 发送 2 个缓存控制标头

我正在使用 ngnix 提供我的静态内容。

位置/静态{
      别名 /opt/static/blog/;
      access_log off;
      etags 上;
      etag_hash on;
      etag_hash_method md5;
      过期 1 天;
      add_header Pragma "public";
      add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}

生成的标题如下所示:

缓存控制:公共,必须重新验证,代理重新验证
缓存控制:最大年龄=86400
连接:关闭
内容编码:gzip
内容类型:应用程序/x-javascript;字符集=utf-8
日期:2012 年 9 月 11 日,星期二 08:39:05 GMT
标签:e2266fb151337fc1996218fafcf3bcee
到期:2012 年 9 月 12 日星期三 08:39:05 GMT
上次修改时间:2012 年 9 月 11 日,星期二 06:22:41 GMT
语用:公开
服务器:nginx/1.2.2
传输编码:分块
变化:接受编码

为什么 nginx 发送 2 个 Cache-Control 条目,这对客户端来说是一个问题吗?

nginx cache static-content etags

6
推荐指数
1
解决办法
6646
查看次数

带有 Apache 2.4 的 RFC 2616

我使用 Apache 2.4.3 作为反向代理,因为它宣传符合 RFC 2616。我的应用程序使用这样的标头来启用代理缓存:

Cache-Control: public, s-maxage=0
Expires: ... (+1 day)
X-Group: A
Vary: X-Group
ETag: W/"foo1"
Run Code Online (Sandbox Code Playgroud)

在第一个请求预热缓存后,如果我的应用程序更改为响应:

Cache-Control: public, s-maxage=0
Expires: ... (+1 day)
X-Group: B
Vary: X-Group
ETag: W/"foo2"
Run Code Online (Sandbox Code Playgroud)

如果来自 Apache 的 If-None-Match 标头与源生成的 ETag 匹配,则应用程序将响应 304 Not Modified。但是,Apache 然后缓存第二个 200 响应并新响应替换“foo1”记录,而不是缓存具有不同 ETag 的两个响应。因此,而不是If-None-Match: W/"foo1", W/"foo2"下一个重新验证请求只是If-None-Match: W/"foo2". 所以缓存不断地丢失而不是总是得到命中。

来自 RFC 2616 第 12.1 节:

然而,源服务器不限于这些维度,可以根据请求的任何方面改变响应,包括请求头字段之外的信息或本规范未定义的扩展头字段内的信息。

我为 Vary 尝试了以下组合:

Vary: X-Foo
Vary: *
Vary: User-Agent
Run Code Online (Sandbox Code Playgroud)

我还尝试了强和弱 ETag,无论我无法让 Apache 同时缓存两个响应,它 …

http reverse-proxy etags apache-2.4

6
推荐指数
1
解决办法
454
查看次数

使用 ETag 与 LastModified 作为 CDN 缓存验证器有何优点和缺点?

我正在Azure CDN 上阅读这篇文章。我可以通过以下方式控制缓存:

  1. ETag
  2. 上一次更改
  3. 默认启发式

前两种选择的优点和缺点是什么?有关系吗?

一个人可能工作的地方与另一个人可能工作的地方可能是:

  • 跨域调用
  • 私人浏览
  • IFrames
  • 阿贾克斯

...该数据要么通过这些方法可见,要么通过其他方法可见。

http cdn etags azure

5
推荐指数
1
解决办法
3491
查看次数

在 nginx 中使用带有随机数的 CSP 时的客户端缓存 - 如何使用弱缓存验证器/etag?

我正在使用nginx 的expires指令;它的etag指令以及Last-Modified标题(如果我理解正确的话)默认情况下处于打开状态。

为了在使用限制性内容安全策略(CSP)标头(即无'unsafe-inline'资源策略)时允许特定的内联 JavaScript,我想使用随机数。

我基本上遵循了Scott Helme 关于此事的文章,在我的试验中使用 nginx$request_id来创建nonce ServerFault 上讨论的内容(以便快速尝试,而不必从头开始构建 nginx)。

然而,当我尝试此操作时,缓存似乎不再按我的预期工作:
Nginx 每次都以文件、新鲜Last-ModifiedETag标头进行响应,而不是304 Not Modified我希望的响应。

仔细想想,这是有道理的:nonceCSP 标头以及源代码中的 都会随着每个请求而变化。然而,其他一切都没有改变。因此,可以说,这是“弱验证器”应该忽略的更改(从而将请求的资源标记为更改)。

话虽如此,我对服务器配置或缓存标头知之甚少,甚至一无所知。很可能我所掌握的少量知识没有帮助,而且弱验证器无论如何也不应该以这种方式工作。

此外,似乎存在一个问题,即当浏览器拥有旧文件的缓存版本nonce但获得304 Not Modified新文件的标头时,浏览器会感到困惑nonce(尽管我自己在试用中没有看到这一点)。

因此,我的问题基本上是:是否可以配置nginx,以便缓存以某种方式工作,当nginx创建头(即它只看起来的地方)时,对唯一的更改(即通过文本替换动态发生的更改)nonce被忽略Last-ModifiedETag在磁盘上的文件更改时) - 有效地使用什么可能是弱验证器?

并且,假设浏览器混乱是一个问题,您是否可以采取一些措施来阻止它,例如当服务器返回 304 时不返回 CSP …

nginx cache etags content-security-policy http-caching

5
推荐指数
0
解决办法
965
查看次数

如何在 Tomcat 中禁用 ETag 标头

默认情况下,Tomcat 似乎为每个响应发送一个 ETag 标头。由于此处概述的原因,我想禁用这些。我知道我可以在我的 Apache 配置中删除它们,但是有什么方法可以在 Tomcat 端禁用它们吗?

performance tomcat http-headers etags

4
推荐指数
1
解决办法
1万
查看次数