我有以下问题,这完全是我的想法。我不得不从一个不想再关心它的人手中接过这个cms并且不给予任何支持。 情况如下:在网站上有几张相册,通过在php中读取目录来填充。一切都很好,图片按照阅读顺序显示。在管理系统中,可以通过向上或向下按钮按顺序更改这些图片。这样做的方法是交换图像的文件名。这工作,当我更改图像的顺序,我可以看到服务器端文件名实际上已被交换。 然而,在网站上并非如此,至少不是立即:在那里交换图像需要平均10分钟。当然,我的客户不能这样工作,他声称它以前一直都有用。我试图关闭缓存浏览器端,这没有帮助。我还可以注意到更改在IE和FF中同时生效。我尝试了几种在PHP中关闭缓存服务器端的方法,也无济于事。 是否还有其他我应该寻找的地方,或者还有其他原因导致这些变化不能立即生效?
此外,我对javascript所做的更改也不会立即被提取。我安装了fiddler,这是该js文件的请求标头:
获取http://www.nobel-country-gite.be/admin/modules/Photoalbum/js/album.js HTTP / 1.1 接受:application / javascript, / ; q = 0.8 推荐人:http://www.nobel-country-gite.be/admin/index.php?page=pic&album=24 接受语言:nl-BE User-Agent:像Gecko一样的Mozilla / 5.0(Windows NT 6.1; WOW64; Trident / 7.0; rv:11.0) Accept-Encoding:gzip,deflate 连接:保持活力 If-Modified-Since:Wed,2015年5月27日15:55:12 GMT 如果 - 无匹配:“ba1248f5-138b-5171244a92f66” DNT:1 主持人:www.nobel-country-gite.be Pragma:没有缓存 Cookie:__ utmc = 39679548; __utma = 39679548.1608184058.1429963360.1432662247.1432664636.7; __utmz = 39679548.1429963360.1.1.utmcsr =(直接)| utmccn =(直接)| utmcmd =(无); __utmc = 1; PHPSESSID = 7uge1ltg2rc11q63untthrc5s1; __utma = 1.459796341.1429963360.1432662247.1432664636.7; __utmz = 1.1429963360.1.1.utmcsr =(直接)| utmccn =(直接)| utmcmd =(无)
响应标头如下: HTTP / 1.1 304未修改 服务器:Apache 最后修改时间:2015年5月27日星期三15:55:12 GMT ETag:“ba1248f5-138b-5171244a92f66” 变化:接受编码 内容类型:应用程序/ javascript 日期:2015年5月27日星期三16:57:55 GMT X-Varnish:1826689067 1825041752 年龄:556 通过:1.1清漆 连接:保持活力
我希望答案不同而不是“未修改”?
编辑 - 等待几分钟并再次刷新页面后,此文件的响应符合预期: HTTP / 1.1 200好的 服务器:Apache 最后修改时间:2015年5月27日星期三16:57:30 GMT ETag:“ba1248f5-1387-51713237ac28e” 变化:接受编码 内容类型:应用程序/ javascript 转移编码:分块 日期:2015年5月27日星期三17:03:43 GMT X-Varnish:1827728442 年龄:0 通过:1.1清漆 连接:保持活力
答案 0 :(得分:1)
我无法帮助,但注意到您正在使用Varnish(由X-Varnish响应标头指示)。 Varnish是一个缓存反向代理,这意味着您的页面不仅可以被浏览器缓存,还可以在服务器上缓存(通过Varnish)。您的浏览器连接到Varnish,Varnish连接到您的Apache后端。
第一个回复标题包括"年龄:556" - 这是缓存版本的年龄,以秒为单位(差不多10分钟)。那么这个年龄就会出现在" 0"当页面刷新时 - 因为Varnish已更新其缓存。您可以通过HTTPS访问该页面以查看您的更改会立即反映出来(Varnish不适用于HTTPS并且大多数人都不打扰设置HTTPS缓存),或者您通常可以将垃圾GET参数添加到您的URL(例如"?bogus = 123")强制Varnish重新获取页面(这不会让其他用户看到新版本,因为他们将通过正常访问网址)。
修正:当您进行更改时,您可以使用varnishadm
禁止(过期)Varnish中的某些网址;你可以修改" Cache-Control"或"到期"您的CMS / Apache(通过PHP,.htaccess等)产生的标头可以减少缓存时间(Varnish在其缓存策略中完全遵循缓存控制标头);你可以通过编辑相关的VCL来改变Varnish的行为(通常" default.vcl");或者你可以接受缓存通常是好的(它们可以节省大量的时间和资源来产生响应),也许10分钟的延迟是可以接受的权衡。