ウェブサーバーのアクセスログを集計していたら、72.14.201.152 や 193.186.4.153 といったIPアドレスから大量にアクセスがあることに気づいた。 逆引きすると 72-14-201-152.v4.fetch.tunnel.googlezip.net や 193-186-4-153.v4.fetch.tunnel.googlezip.net といったホスト名になっている。
この googlezip.net とは何か? Googleはボット等で使用しているIPアドレス帯域を公開しており、そこに上記アドレスも含まれているので、実際にGoogleからのアクセスのようである。
この件に関して調べても情報がほとんど見つからなかったが、先日偶然海外のサイトから Chrome for Developers にある Chrome のプライベート プリフェッチ プロキシ や ネットワーク管理者による Chrome の非公開プリフェッチ プロキシ のページにたどり着き、正体や仕様が分かった。
fetch.tunnel.googlezip.net からのアクセスは、Chromeブラウザに搭載されているウェブページの先読み(プリフェッチ)機能だった。 これは、Chromeでウェブページを閲覧した際、そのページ内にあるリンク先のページデータを予め取得しておき、そのリンクをクリック(タップ)したときに素早くページが表示できるというもの。 プリロードとも呼ばれる。
ページが素早く表示されるという点では、Chromeユーザー、サイト運営者双方にメリットがある。 ただChromeが先読みしても、ユーザーがそのリンク先のページにアクセスするとは限らない。 その場合、単にサーバーに負荷がかかるだけになる。 サイトによるが、PVが多いサイトやページ数が多いサイトはプリフェッチが多くなる可能性がある。
上記 Chrome for Developers のページに主な仕様が書かれている。
まず、Chrome Privacy Preserving Prefetch Proxy というユーザーエージェントのボット(プログラム)が各サイトの /.well-known/traffic-advice というファイルにアクセスしてくる。 ただしアクセス元は上記の googlezip.net と異なり、IPアドレスは 66.249.82.15、ホスト名は google-proxy-66-249-82-15.google.com などが使用されている。
traffic-advice にはプリフェッチの頻度や可否が記述できる。 先述のようにサーバーの負荷になりかねないのでそういう設定ができるようになっている。 要するにサイト運営者におなじみの robots.txt のようなものである。
traffic-advice には以下のように記述する。 書式としてはJSON形式。
[{ "user_agent": "prefetch-proxy", "fraction": 0.3 }]
この例はプリフェッチのトラフィック量が0.3(30%)になる設定。 fraction の数値は 0.0~1.0 まで指定でき、数値が大きいほどトラフィック量が多くなる。 0(ゼロ)だとプリフェッチが行われなくなる。
プリフェッチを拒否するには0でも良いが、以下のように記述することもできる。
[{ "user_agent": "prefetch-proxy", "disallow": true }]
falseだと逆に許可することになる。
ログを見るとプリフェッチのたびに traffic-advice を参照しているわけでなく、robots.txt のように定期的にチェックしてようである。
サイトのルートディレクトリに /.well-known/ というフォルダを作り、そこに traffic-advice ファイルを置く。 ただし、robots.txt のようにテキストファイルでは機能せず、無視されてしまう。
MIMEタイプ(Content-Type)を application/trafficadvice+json にして出力(応答)しなければいけない仕様になっている。 PHPなどのプログラムではなく単なるテキストファイルを特定のMIMEタイプで送出するには、例えば .htaccess に以下のように記述する。
<Files traffic-advice> ForceType application/trafficadvice+json </Files>
これを traffic-advice と一緒に /.well-known/ フォルダに置いておけば良い。 一応、さくらのレンタルサーバやエックスサーバーで動作するのを確認した。
MIMEタイプの指定にはAddTypeがよく使われるが、traffic-advice は拡張子がないので、ここでは ForceType を使用している。 ただ、このままだと他のファイルにも影響するのでFileディレクティブで traffic-advice のみにMIMEタイプを適用している。
私のサイトにて仕様どおりにプリフェッチを拒否後、プリフェッチが行われなくなったことを確認した。
Chromeにはプリフェッチの設定があり、モバイル版だけでなくPC版にもある。
モバイル版は以下のとおり。
PC版は以下のとおり。
なお、Chromeのバージョンによって設定箇所が異なる場合がある。