アカウント名:
パスワード:
意外と知らない人が多いのですが、Google Chrome は 301 リダイレクトを永久キャッシュします。永久というのは1年先でも2年先でも、ユーザーがブラウザのキャッシュを削除しない限り、リダイレクト元がどうなっていようがリダイレクト先にアクセスしてしまうということです。
リダイレクト元へのHTTPサーバへのアクセスは勿論、DNSリクエストすら発生しません。
となると、もし間違って301リダイレクトしてしまうと、それが永久キャッシュされてしまい、取り返しがつかなくなります。(間違った設定の期間にアクセスした人は、永遠に間違ったリダイレクトがされてしまい、正しいリダイレクト先にアクセスできなくなります)
Ctrl + F5 でスーパーリロードしても、リダイレクト先がリロードされるだけなので無駄です。ユーザにキャッシュ削除させるしか事実上の救済先がなく、サイトオーナーの立場ではどうしようもならなくなります。
また、例えば数か月後に、元あるドメインに戻そうとした場合とか、URL構成変更などを行った場合でリダイレクト前のURLを再利用したいときとかにも支障が生じます。(ただし、元のURLに対して301リダイレクトをした場合には、最初のリダイレクトキャッシュはクリアできます。 そのため、現存しないリダイレクトキャッシュによる無限リダイレクトは発生しませんし、リダイレクト元へリダイレクトすることとでリダイレクトキャッシュを無効化することは可能です)
ということで、リダイレクト元のURLを再利用する可能性が少しでもある場合には、下記のように "Cache-Control: no-store" ヘッダーを書いておくことをおすすめします。こうすれば、Google Chrome でもリダイレクトがキャッシュされないことを最新版で確認済みです。no-cache では駄目でした。
// phpの場合のコード// こうすれば Google Chrome のリダイレクトのキャッシュを回避できますhttp_response_code(301);header('Cache-Control: no-store, no-cache'); // Google Chrome は no-cache だけでは永久キャッシュしちゃいますheader('Location: 'https://example.com/');
逆に、リダイレクト元のドメインを譲渡・販売するときなんかは、no-store 無しでリダイレクトするとおトクです。301 リダイレクトが永久キャッシュされるので、リダイレクト前にアクセスしたユーザに対しては、新しいドメインオーナーのコンテンツは表示されずに、自分のサイトに誘導し続けることができます。
"301 Moved Permanently" なんだから当然の動作では?永久キャッシュが嫌なら "302 Found" か "307 Temporary Redirect" を使用すればよいだけです。
元あった物が新しい場所に移動したことを示すだけで、今後その場所がずっとただの跡地であり続けるとは言ってないだろ
ドメインを跨ぐリダイレクトなら、永久キャッシュにも古いドメインが廃止になってもユーザがアクセスできるというメリットがあると思います。けど、問題なのは同一ドメインのリダイレクトでも永久キャッシュされてしまうんですね。
ショッピングサイトが2020年のサマーキャンペーンをやったとします。 https://example.com/campaign/ [example.com]
キャンペーン期間が終わりましたが、過去のキャンペーンの細則を確認できるように301リダイレクトをしました。 https://example.com/campaign/ [example.com] → https://example.com/old-campaign/2020-summer/rules [example.com] (301リダイレクト)
そして、2021年のお正月に新しくお正月キャンペーンを下記のURLで始めたとします。 https: [example.com]
301は「ブラウザのブックマークを書き換えろ」って意味も含んでるので、そんなに気軽に使っていいものじゃないよ。同じURIを再利用するのは論外。
# 永久キャッシュは凄く迷惑な仕様だと思います。
301は"Moved Permanently"、「永久的な移動」でしょう?「永久にリダイレクトする」ではなく、「ターゲットリソースの位置が永久に移動した」という意味です。(その意味に従い、ブラウザはリダイレクトしたり、ブックマークを書き換えたりする)根本的に、使い方を間違えているだけだと思います。
そもそも、RFCに「メソッド定義や明示的なキャッシュ制御がないかぎり、規定値としてキャッシュ可能」とありますし。
Hypertext Transfer Protocol (HTTP/1.1) [ietf.org]
Chromeがそういう仕様ってことは新Edgeも同様なのかな?
Firefoxもそうですよ。
むしろそうじゃないブラウザーって何? IE?
確かめなおしていないのであれですがIEもキャッシュしていた気がしますねぇ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
犯人は巨人ファンでA型で眼鏡をかけている -- あるハッカー
【注意喚起】Google Chrome は 301 リダイレクトを永久キャッシュするので要注意 (スコア:1)
意外と知らない人が多いのですが、Google Chrome は 301 リダイレクトを永久キャッシュします。
永久というのは1年先でも2年先でも、ユーザーがブラウザのキャッシュを削除しない限り、リダイレクト元がどうなっていようがリダイレクト先にアクセスしてしまうということです。
リダイレクト元へのHTTPサーバへのアクセスは勿論、DNSリクエストすら発生しません。
となると、もし間違って301リダイレクトしてしまうと、それが永久キャッシュされてしまい、取り返しがつかなくなります。
(間違った設定の期間にアクセスした人は、永遠に間違ったリダイレクトがされてしまい、正しいリダイレクト先にアクセスできなくなります)
Ctrl + F5 でスーパーリロードしても、リダイレクト先がリロードされるだけなので無駄です。
ユーザにキャッシュ削除させるしか事実上の救済先がなく、サイトオーナーの立場ではどうしようもならなくなります。
また、例えば数か月後に、元あるドメインに戻そうとした場合とか、URL構成変更などを行った場合でリダイレクト前のURLを再利用したいときとかにも支障が生じます。
(ただし、元のURLに対して301リダイレクトをした場合には、最初のリダイレクトキャッシュはクリアできます。
そのため、現存しないリダイレクトキャッシュによる無限リダイレクトは発生しませんし、リダイレクト元へリダイレクトすることとでリダイレクトキャッシュを無効化することは可能です)
ということで、リダイレクト元のURLを再利用する可能性が少しでもある場合には、下記のように "Cache-Control: no-store" ヘッダーを書いておくことをおすすめします。
こうすれば、Google Chrome でもリダイレクトがキャッシュされないことを最新版で確認済みです。no-cache では駄目でした。
// phpの場合のコード
// こうすれば Google Chrome のリダイレクトのキャッシュを回避できます
http_response_code(301);
header('Cache-Control: no-store, no-cache'); // Google Chrome は no-cache だけでは永久キャッシュしちゃいます
header('Location: 'https://example.com/');
逆に、リダイレクト元のドメインを譲渡・販売するときなんかは、no-store 無しでリダイレクトするとおトクです。
301 リダイレクトが永久キャッシュされるので、リダイレクト前にアクセスしたユーザに対しては、新しいドメインオーナーのコンテンツは表示されずに、自分のサイトに誘導し続けることができます。
Re:【注意喚起】Google Chrome は 301 リダイレクトを永久キャッシュするので要注意 (スコア:1)
"301 Moved Permanently" なんだから当然の動作では?
永久キャッシュが嫌なら "302 Found" か "307 Temporary Redirect" を使用すればよいだけです。
Re: (スコア:0)
元あった物が新しい場所に移動したことを示すだけで、今後その場所がずっとただの跡地であり続けるとは言ってないだろ
Re: (スコア:0)
ドメインを跨ぐリダイレクトなら、永久キャッシュにも古いドメインが廃止になってもユーザがアクセスできるというメリットがあると思います。
けど、問題なのは同一ドメインのリダイレクトでも永久キャッシュされてしまうんですね。
ショッピングサイトが2020年のサマーキャンペーンをやったとします。
https://example.com/campaign/ [example.com]
キャンペーン期間が終わりましたが、過去のキャンペーンの細則を確認できるように301リダイレクトをしました。
https://example.com/campaign/ [example.com] → https://example.com/old-campaign/2020-summer/rules [example.com] (301リダイレクト)
そして、2021年のお正月に新しくお正月キャンペーンを下記のURLで始めたとします。
https: [example.com]
Re: (スコア:0)
301は「ブラウザのブックマークを書き換えろ」って意味も含んでるので、そんなに気軽に使っていいものじゃないよ。同じURIを再利用するのは論外。
Re: (スコア:0)
301は"Moved Permanently"、「永久的な移動」でしょう?
「永久にリダイレクトする」ではなく、「ターゲットリソースの位置が永久に移動した」という意味です。
(その意味に従い、ブラウザはリダイレクトしたり、ブックマークを書き換えたりする)
根本的に、使い方を間違えているだけだと思います。
そもそも、RFCに「メソッド定義や明示的なキャッシュ制御がないかぎり、規定値としてキャッシュ可能」とありますし。
Hypertext Transfer Protocol (HTTP/1.1) [ietf.org]
Re: (スコア:0)
Chromeがそういう仕様ってことは新Edgeも同様なのかな?
Re: (スコア:0)
Firefoxもそうですよ。
Re: (スコア:0)
むしろそうじゃないブラウザーって何? IE?
Re: (スコア:0)
確かめなおしていないのであれですがIEもキャッシュしていた気がしますねぇ。