【问题标题】:IIS 7.5 and ARR - 304 status code not sent for imagesIIS 7.5 和 ARR - 未为图像发送 304 状态代码
【发布时间】:2014-06-24 08:23:56
【问题描述】:

我们在 Sitecore 网站前使用 ARR 设置了反向代理。我们仅使用此反向代理来提供站点核心媒体项目。 Sitecore 媒体项目正在使用 ARR 正确缓存在磁盘上。

现在我们面临的问题是,对于所有图像,HTTP 状态码始终为 200,因此它们不会缓存在浏览器中。如果我们禁用反向代理,那么 HTTP 状态码是 304,浏览器会从本地缓存中渲染图像。

ARR 不发送 304 状态码有什么原因吗?

更新 #1:下面是我们设置的 ARR 规则:

    <rule name="Default ReWrite" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
      <match url="^(.*)" />
      <conditions>
                    <add input="{CACHE_URL}" pattern="^(https?)://" />
      </conditions>
      <action type="Rewrite" url="http://127.0.0.1/{R:0}" logRewrittenUrl="true" />
                <serverVariables>
                </serverVariables>
    </rule>

【问题讨论】:

  • web.config 中MediaResponse.Cacheability 设置的值是多少?您正在运行什么版本的 Sitecore?
  • @computerjules,我使用的是 Sitecore 6.6,MediaResponse.Cacheability 设置为“public”。
  • 这个设置没问题。你能提供你定义的ARR规则的设置吗?
  • @computerjules,我已经更新了相关的 ARR 规则。
  • 嗯.. 我试过在 IIS 8.5 上重现这个但没有运气。

标签: iis-7.5 sitecore arr http-status-code-304


【解决方案1】:

查看帖子: http://forums.iis.net/t/1213330.aspx?ARR+Disk+cache+return+200+instead+of+304+for+cached+files

看起来它与 ETAG (IF-NONE-MATCH) 标头有关 - 如果 ETAG 是从服务器发出的,然后由另一台服务器验证(在这种情况下为 ARR),这将不起作用。所以 ARR 永远不会向浏览器返回 304,而只是从磁盘中获取缓存文件并返回 200 给浏览器。

【讨论】:

  • 感谢您的建议。删除 ETAG 后,ARR 开始为缓存文件发送 304 状态码。
  • 仅供参考,要从 IIS 中的响应中删除 ETAG,可以使用出站规则。查看下面的 SO 帖子了解更多详情:stackoverflow.com/a/18025228/1101223
猜你喜欢
  • 2012-10-06
  • 1970-01-01
  • 2012-05-26
  • 2011-08-13
  • 2022-07-28
  • 2013-09-19
  • 2017-05-29
  • 2019-09-17
  • 2013-06-03
相关资源
最近更新 更多