8

これはUsing 301/303/307 redirects for dynamic short urlsへのフォローアップの質問です。ここでは、宛先URLが頻繁に変更されるときに短いURLリダイレクトを実装するための最良の方法を決定しようとしています。301リダイレクトキャッシングを避ける

301と307のリダイレクトはどちらも同じように実行されるようですが、301リダイレクトキャッシュ(文書化されているようにhere)は、307リダイレクトを使用しないようにするための最良の方法です307リダイレクトはキャッシュされません)、またはno-cacheヘッダー(「Cache-Control:no-cache、must-revalidate」)を明示的に送信する必要がありますか?

+0

関連:http://stackoverflow.com/questions/12192590/how-to-do-a-non-cached-301-redirect/19003320#19003320 –

答えて

16

301キャッシングを避けようとしないでください。ユーザーエージェントがリダイレクトをキャッシュしないようにするには、単に301リダイレクトを使用しないでください。言い換えれば、301キャッシングはここにとどまり、意味的にはの永久的なのリダイレクトです。したがって、リンク先URLを変更する予定がある場合、301は正しいステータスコードではありません。一方、307 responses are not cached by default

+3

あなたの解釈はHTTP仕様に違反しています。クライアントはCache-Controlに従っている必要があります。012. – Gili

+0

@Giliはい、クライアントはCache-Controlを守らなければなりませんが、301はまだ* permanent *です。リダイレクトが意図されていない場合は使用しないでください永久それは永久的なので、https://tools.ietf.org/html/rfc2616#section-10.3.2 –

+0

301に定義されているようにデフォルトでキャッシング可能です(デフォルトのキャッシングルールのみです)。 http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-24#section-6.4.2 '301応答は、[...]明示的なキャッシュ制御「明示的なキャッシュ制御」とは、「キャッシュ制御」および関連するヘッダを意味する。 – Gili

8

ブラウザのブックマークの更新やGoogleボットのURLの変更などの301リダイレクトの動作が必要な状況で、同時にリダイレクトを追跡したり、他の種類の機能を実行したい場合

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

常にそれがこのようになりますPHPで "キャッシュなし"

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 

にキャッシュ制御ヘッダを追加することができます