如何区分“预取”页面请求与普通请求?

如何区分“预取”页面请求与普通请求?

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

Firefox 插件,更快的狐狸,以及 Google 的 Web Accelerator(似乎不再提供下载)就是我所知道的两个这样的插件。

此类请求在 Apache 事件日志中可以与普通页面请求区分开来吗?

答案1

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 草案中没有任何内容要求或建议 UA 向服务器识别此类请求。

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

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

答案2

由于它们可能使用与常规页面请求相同的用户代理,因此很难做到。您可能能够编写一些代码来通过时间模式来区分它——对一个页面的请求之后是一系列对其他页面的请求,速度比人类可能请求的速度要快。但是,您可能会在其中得到很多误报。

相关内容