web-dev-qa-db-ja.com

301リダイレクトキャッシュの回避

これは 動的な短縮URLに301/303/307リダイレクトを使用する へのフォローアップの質問です。ここでは、宛先URLが頻繁に変更される場合に短縮URLリダイレクトを実装するための最良の方法を決定しようとします。

301リダイレクトと307リダイレクトはどちらも同じように機能するようですが、私が懸念している問題は、301リダイレクトキャッシュです(文書化されているように ここ )-代わりに307リダイレクトを使用することを回避する最善の方法です(I 307リダイレクトがキャッシュされないと想定していますか?)、またはキャッシュなしのヘッダーを明示的に送信するため( "Cache-Control:no-cache、must-revalidate")?

16
Yarin

301キャッシングを避けようとしないでください。ユーザーエージェントにリダイレクトをキャッシュさせたくない場合は、301リダイレクトを使用しないでください。言い換えれば、301キャッシュはここにとどまり、意味的には永続的リダイレクトであるため、リンク先URLを変更する場合は301使用する適切なステータスコードではありません。一方、 デフォルトでは307の応答はキャッシュされません

21

ブラウザのブックマークの更新やGoogleボットのURLの変更など、301リダイレクトがもたらす動作が必要であると同時に、リダイレクトを追跡したり、その他の種類の機能を実行したりする場合は、いつでも追加できます。 「キャッシュなし」へのキャッシュ制御ヘッダー

HTTP/1.0 301 Moved Permanently
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Sat, 26 Jul 1997 05:00:00 GMT
Location: http://example.com

PHPでは次のようになります。

header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Location:'.$url, true, 301);

関連: https://stackoverflow.com/a/19003320/175071

10
Timo Huovinen