如何区分来自普通请求的“预获取”页面请求?

“Pre-Fetching”可能不是最广泛使用的术语,但无论如何,我指的是在用户发出实际请求之前请求页面的浏览器插件。 (例如,当一个新的页面加载并开始阅读时,浏览器将预先获取该页面上的所有链接(因为它不知道您将决定点击哪个链接)。

Firefox插件Fasterfox和Google的networking加速器(不再可以下载,看来)是我所知道的两个这样的插件。

这些请求是否可以在Apache事件日志中与普通的页面请求区分开来?

Firefox预取请求具有HTTP标头X-moz设置如下

'X-moz: prefetch' 

因此,您可以从CGI脚本或类似文件中识别预取,但不能从缺省日志格式的apache日志文件中识别。 如果你定义了一个自定义日志文件格式,你可以包含X-moz头文件的内容:

 %...{X-moz}i 

所以,调整默认的日志格式以在日志行末尾包含这个:

 LogFormat "%h %l %u %t \"%r\" %>s %b %{X-moz}i" 

在HTML5中有一些标准化预取的工作,但目前HTML5草案中没有任何内容要求或build议UA向服务器标识这种请求。

有关更多信息,请参阅mozilla开发人员有关预取的常见问题解答:

https://developer.mozilla.org/en/Link_prefetching_FAQ

由于他们可能会使用与普通页面请求相同的用户代理,所以很难做到这一点。 你可能会写一些东西来区分它的时间模式 – 一个页面的请求,其次是一个请求的其他网页的请求,比人类可能要求更快。 但是,你可能会在那里得到很多误报。