我有一个位于非公共域上的网站,并通过代理在另一个域上进行交付。我们在内容缓存方面遇到了一些麻烦-这是一个Umbraco网站,如果您直接访问域而不是通过代理访问域,则进行更改会更新页面。
我已获悉,该代理使用响应标头并设置eTag可以解决此问题。研究了这一点,我可以看到IIS默认设置了eTag,并且可以看到它正在处理静态内容,即.js
,.css
文件,如下所示:
但是,如果我访问网站上的页面,例如/uk/products/product
,则看不到eTag标头。
这是预期的行为,它应该仅与那些静态内容文件一起使用,还是可以在页面上进行设置以告知代理应该重新缓存?
ETag HTTP响应标头是资源特定版本的标识符。它使缓存更加有效并节省了带宽,因为如果内容未更改,Web服务器不需要重新发送完整的响应。另外,etags帮助防止资源的同时更新被彼此覆盖(“空中冲突”)。
如果给定URL上的资源发生更改,则必须生成一个新的Etag值。
静态内容在请求之间不会改变。返回到Web浏览器的内容始终相同。静态内容的示例包括HTML,JPG或GIF文件。
IIS自动缓存静态内容(例如HTML页面,图像和样式表),因为这些类型的内容在请求之间不会更改。进行更新时,IIS还会检测到文件的更改,并且IIS会根据需要刷新缓存。
要在iis中启用缓存,您可以使用iis输出缓存功能:
1)打开iis管理器。选择站点。
2)从中间窗格中选择输出缓存功能。
3)从中间窗格中选择编辑功能设置。
4)选中启用缓存并启用内核缓存框,然后单击确定。
如果要将ETag设置为空白,也可以通过在web.config文件中添加以下代码来完成:
<httpProtocol>
<customHeaders>
<add name="ETag" value="" />
</customHeaders>
</httpProtocol>
请参阅下面的这篇文章以获取更多详细信息: