Sunday, April 11, 2010

301 リダイレクトをchromeがキャッシュする

Cookieを使ってユーザの tracking をする場合、redirect に 301 を使うのは要注意。

Google が 301 リダイレクトを推奨しているように、301 を使うと search engine の score がリダイレクト先に移動するので、 サイトの引越しには 301 を使うと良い。

でも、アフィリエイトとかで Cookie を使って tracking している場合には、301 は使えない。 なぜなら、chrome がリダイレクト先をキャッシュするから。

以下の記事で書いてるとおり、最近のブラウザでは chrome のみキャッシュする。
http://bugsquash.blogspot.com/2008/12/google-chrome-caches-301-redirects.html

検証コードを書いてみた。
a.php
b.php
サンプル

a.php でクッキーを保存し、301リダイレクト
b.php でクッキーを参照&削除

chrome でアクセスすると、最初はクッキーに保存されるが、 2回目以降のアクセスでは、a.php にアクセスしなくなる。

IE8、Firefox3、Opera、Safari では、キャッシュしなかった。

もうちょっと調べると、2007年の記事で、MozillaとFirefox がキャッシュするという内容を見つけた。
http://www.webmasterworld.com/google/3229652.htm

RFC2616 では、 10.3.2 301 Moved Permanently のところで、

This response is cacheable unless indicated otherwise. 
となっているので、chrome の動作は悪くない。

ふと思い立って、Pragma: no-cache を付けてみることにした。

a.php

chrome でもリダイレクトしてくれた。

結論としては、Pragma: no-cache をつければ、chrome でもキャッシュしないが、 古いブラウザでもちゃんと動作するかは検証が必要。

No comments:

Post a Comment