我有一个基于图像的网站,主持多个画廊。 当用户点击其中一个图像时,特定图像的views属性会增加。 不过,我注意到当使用Firefox(14.0.0.1)时,它将视图增加了两倍,而不像K-meleon那样复杂的浏览器增加了一次属性 – 就像它应该那样。
有人然后在stackoverflow指出,这可能是由于在现代浏览器中的预取导致PHP脚本,从数据库中提取图像,并增加视图执行两次。 所以,检查我的apache access.log我注意到,Firefox确实要求每个图像两次:
Firefox / 14.0.1“:: 1 – – [03 / Aug / 2012:16:41:37 +0100]”GET /imgsite/getImg.php?id=23 HTTP / 1.1“200 57362” http:// localhost /imgsite/index.php“”Mozilla / 5.0(Windows NT 6.1; rv:14.0)Gecko / 20100101 Firefox / 14.0.1“:: 1 – – [03 / Aug / 2012:16:41:37 +0100]” GET /imgsite/getImg.php?id=23 HTTP / 1.1“200 57362” – “”Mozilla / 5.0(Windows NT 6.1; rv:14.0)Gecko / 20100101 Firefox / 14.0.1“
然后,我读了.htaccess,并尝试了阻止Firefox(或铬)发送的预取头的几种方法,但是不应该在上面的代码片段中显示这些头文件? 到目前为止没有任何工作。 这里是我的.htaccess文件,放在我的网站的HTML根path中:
RewriteEngine On RewriteCond %{HTTP:X-moz} prefetch RewriteRule . . [F,L]
我已经尝试了其他更广泛的变种,仍然无济于事。 我的apache安装程序允许.htaccess作为mod_rewrite.so行被启用。
我见过的所有东西,再加上重写都不会影响任何事情,这让我相信这实际上不是一个预先提取的问题。
如果有人能够解释这个问题,我将非常感激。 谢谢。
我发现这个问题很有趣,因为我也遇到了一些麻烦。
根据这个网站的预取提示 ,从Firefox(无论如何)在每个请求(X-moz:prefetch)中有一个特定的头文件。 这个网站展示了一些方法来识别这些头文件并logging它们,以及一些强制预取的方式来performance一些更友好的方式。
至less如果你能得到logging的信息,你可以确定它是否确实预取导致你的问题。
我还没有尝试过这个网页,所以不知道它是否有效。 我做了书签,为将来的testing。 有时,现代全function浏览器将预取大部分网站并导致诸如增加视图数量之类的小问题,这是非常令人沮丧的。 当你在networking浏览器的操作端,这是一件好事,我承认。 点击和立即显示整个页面,graphics和所有东西的好东西。
希望这些信息能够为您指出正确的道路,至less可以诊断您的问题,如果不解决的话。 祝你好运!
请注意,在您的日志中,第二个请求没有引用者字段。 所以这些请求并不完全相同。 我怀疑预取可能是这里的问题。
还检查文件上的HTTP标头? 如果由于PHP处理而发送无caching头,这可能是问题的一部分。 请注意,如果您的caching正在运行,那么这两个响应都是200 OK而不是304响应。
一些想法:
1)运行简单的testing来确认正在进行htaccess重写规则。 可能是他们被忽略了。
2)如果你还没有,尝试:
RewriteEngine On RewriteCond %{HTTP_X_MOZ} ^prefetch$ RewriteRule ^.*$ - [F]
3)用户curl
curl --header "X-moz: prefetch" www.google.com
从命令行进行testing。
有关日志和其他日志对日志影响的良好讨论,请参阅:
我的0.02美元,不只是盲目增加一个页面视图,这是一个操作的秘诀。 根据客户端IP地址/时间做一些事情,这将确保预取等事情不会生效。
另一部分是如果在头文件中设置了预取,则不要运行这个例程。