我的网络服务器允许预取吗?

我的网络服务器允许预取吗?

我有一个基于图片的网站,其中包含多个图库。当用户单击其中一张图片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(或 Chrome)发送的预取标头,但这些标头不应该出现在上面的代码片段中吗?到目前为止,没有任何效果。这是我的 .htaccess 文件,它位于我网站的根 HTML 路径中:

RewriteEngine On
RewriteCond %{HTTP:X-moz} prefetch
RewriteRule . . [F,L]

我尝试了上述其他更广泛的变体,但仍然无济于事。我的 apache 设置允许 .htaccess,因为 mod_rewrite.so 行已启用。

我所看到的一切以及重写不影响任何东西的情况都让我相信这实际上不是一个预取问题。

如果有人能解释一下这个问题,我将非常感激。谢谢。

答案1

我发现这个问题很有趣,因为我也遇到过一些这样的困扰。

根据该网站预取提示每个请求中都有一个特定的标头(无论如何都是来自 Firefox)(X-moz:预取)。此站点展示了一些识别这些标头并记录它们的方法,以及一些尝试强制预取以使其表现得更友好一些的方法。

至少如果您可以获得记录的信息,您就可以确定是否确实是预取导致了您的问题。

我还没有尝试过这个网页上的任何内容,所以不知道它是否有效。我确实将它收藏起来以备将来测试。有时,现代全功能浏览器会预取网站的重要部分并导致诸如增加浏览次数之类的小问题,这非常令人沮丧。我承认,当你在网络浏览器的操作端时,这是一件好事。关于点击并立即显示整个页面、图形和所有内容。

希望这些信息能为您指明正确的方向,至少诊断您的问题,即使不能解决问题!祝您好运!

答案2

请注意,在您的日志中,第二个请求没有 referrer 字段。因此这些请求并不完全相同。我怀疑预取可能是这里的问题。

还要检查文件的 HTTP 标头吗?如果您由于 PHP 处理而发送了无缓存标头,则这可能是问题的一部分。请注意,如果您的缓存正常工作,则两个响应都是 200 OK,而不是 304 响应。

一些想法:

1) 运行简单测试以确认 htaccess 重写规则正在处理中。可能是它们被忽略了。

2)如果还没有,请尝试:

RewriteEngine On
RewriteCond %{HTTP_X_MOZ} ^prefetch$
RewriteRule ^.*$ - [F]

3)用户卷曲

curl --header "X-moz: prefetch" www.google.com

从命令行进行测试。

有关 prefecth 和日志上其他项目对日志的影响的详细讨论,请参阅:

http://www.adrianworlddesign.com/Knowledge-Base/Zend-Framework/Helpful-Tips/Browsers-refresh-reload-your-pages

答案3

我的 0.02 美元,不要盲目地增加页面浏览量,这是操纵的秘诀。根据客户端 IP 地址/时间做一些事情,这将确保预取之类的事情不会生效。

另一部分是,如果在标题中设置了预取,则不要运行该例程。

相关内容