Firefox浏览器具有自动预读的特性,当网页源代码中出现rel='next'或者rel='prefetch'的meta标签时,firefox会自动访问标签指向的链接,将其内容加载到缓存中,因为用户可能不久就要访问这个页面,可以提升访问速度。潜在的问题是,这种自动访问是在用户没有授权的情况下发生的。
目录
Firefox Prefetching
Firefox自动预读(Forefox Prefetching)是如何工作的?
简单的说,当网页头部中出现如下meta标签时,firefox就自动自觉的去读取链接的内容
<link rel="prefetch" href="http://www.domain.com"> <link rel="next" href="http://www.domain.com/next-article/">
自动预读的好处:
通常,被标识为next或者prefetch的链接是用户接下来极有可能访问的地址,自动加载这个地址的内容到缓存,如果用户真的访问了,可以显著提升访问速度。
自动预读潜在的危险:
Firefox安装后,自动预读就是默认打开的,没有任何界面提示用户这个功能的存在,所以很多Firefox用户就在毫不知情的情况下允许Firefox去加载一些他们可能根本不会访问的网页。如果只是获取下一篇文章,没什么问题。如果网站中故意写上prefetch meta标签,并且指向一些病毒或者收集用户信息的网站,那就危险了。
自动预读给WordPress带来的问题
WordPress默认会输出
<link rel="next" href="http://www.domain.com/next-article/">
一般情况下没问题,等于变相增加网站流量。特殊情况下,例如你想记录用户访问过哪些网页,精确记录,那Firefox预取功能就会自动获取用户尚未浏览且可能根本不会去看的下一页,或者说自动预取使访问一个页面时WordPress所有的钩子执行两遍,导致记录错误。
如果你遇到如下情况:
- 本该记录一条meta信息,数据库中却出现两条,两条记录更新时间间隔几秒钟
- 在当前页面输出了下一页的信息,例如输出了错误的meta description等等
这些都有可能是Firefox的自动预取功能导致的。
如何禁用自动预取功能
对WordPress网站,避免这个问题的方法是移除next标签,在主题的functions.php添加如下代码即可
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
对于普通用户,要关闭自动预取只能修改Firefox的配置文件:
- 在Firefox地址栏输入about:config
- 如果遇到警告提示,忽略警告,继续编辑
- 在搜索栏查找network.prefetch-next,注意前后不要有空格
- 找到后双击即可将default-true改为user set-false
我是firefox忠实用户
不过对于大众来说,现在用chrome的人更多些