2012-02-22 88 views
0

我对缓存的工作方式知之甚少,或者对托管服务器的nginx有很大的控制。但是,我确实有一个需要更改的现场网站,因此您的建议将非常感谢。浏览器会使用不同的ETag缓存页面吗?

目前,我有以下三个文件:

index.html 
my.js 
my.css 

所有文件都被服务(在我的浏览器)具有以下标题:

Date:Wed, 22 Feb 2012 23:17:49 GMT 
ETag:"b2c84d1-7551-4b995b0c89c0" 
Last-Modified:Wed, 22 Feb 2012 23:14:34 GMT 
Server:nginx 

有没有任何其他的cache相关的标题。鉴于上述情况,如果我简单地用新版本替换文件,我是否可以假设用户的浏览器将不知道使用缓存版本? (我假设如果我替换文件,ETag将会改变。)

我想避免的情况是用户的浏览器下载新版本index.html但继续引用缓存版本my.js,因为这很可能会破坏事物。我还想知道,如果我可以依靠用户查看该网站的较新版本,或者某些用户将继续看到缓存版本。

感谢您的帮助。

回答

0

浏览器将发送If-Modified-Since:和(如果您有最新的浏览器)的If-None-Match:头,第一个指的的Last-Modified:头,包含ETag后者。如果修改日期比Last-Modified标题更新,服务器将发送新文件。 ETag如何改变将取决于你的服务器,但在大多数情况下,这将是对文件内容的散列。

所以,只要确保文件内容更改和修改日期是最新的(例如通过touch /var/www/your-file.js)。

+0

谢谢!我没有看到我的浏览器(Chrome)发送了您提到的任一If- *标头,至少在我查看Developer Tools时看不到它们附加到请求。但我会接受你的说法,即更改内容并触摸该文件,这意味着不需要缓存。感谢您的帮助。 – Richard 2012-02-23 01:27:23

相关问题