2014-01-07 98 views
0

所以我只是因为这里的挫折而发疯。我正在构建一个简单的网站:一个带有链接JavaScript的静态HTML页面。 JS经常更新,所以很自然,我希望能够上传一个新的.js文件到服务器 - 我正在使用网络酒店 - 在我的浏览器中重新加载页面并获得新版本。除了我得到旧文件。就我所知,这个问题只发生在我的电脑上。我试着重新加载页面并在Chrome开发人员工具中禁用JS缓存。如果我等几分钟并上传一个新文件,问题似乎就会消失。我没有root权限访问Web服务器,但可以使用PHP。Web浏览器缓存故障排除

如何继续查找问题的真正原因?

更新:我找到了解决方法;要将我的index.html重命名为index.php,并且(使用PHP)将唯一编号附加到JavaScript文件URL。像这样:

<script src="trafik.js?a=<?php echo time(); ?>"></script> 

这会强制浏览器重新加载文件。然而,我原来的问题仍然存在,因为我没有找到原因,我不知道如何系统地处理这个问题。此外,这似乎是一个丑陋的解决方案,让PHP参与其中。

+0

你保持devtools开放的,对不对?此选项仅适用于您。 (但你可能已经知道了。) –

+0

在ctrl-f5(在windows上)是否会导致javascript被重新加载? – Jondlm

+0

您可以在Mac OSX上尝试'ctrl + shifr + R'或'cmd'来强制在Chrome中刷新缓存。它有时会有帮助!要么你依靠你的服务器缓存,这可能是不准确的。 – Bigood

回答

0

如果确实在浏览器中禁用了缓存,则意味着缓存的版本由服务器提供。所以,这是一个与Apache(或Nginx,或任何http服务器)有关的问题。

也许你可以尝试添加.htaccess文件与这些规则(mod_headers中需要启用,希望这是一个默认安装在你的网络服务器):

<FilesMatch "\.(html|htm|js|css)$"> 
FileETag None 
<ifModule mod_headers.c> 
Header unset ETag 
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
Header set Pragma "no-cache" 
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 
</ifModule> 
</FilesMatch> 
+0

我有这样一行.htaccess文件:'Header add“disablecache”“true”' – David

+0

你最好避免使用'add',如文档中所述(http://httpd.apache.org/docs/current/en/ mod/mod_headers.html),它可能与现有规则重叠(并且您的规则可能被忽略)。更喜欢使用set,追加或合并。 – Akaryatrh