アカウント名:
パスワード:
意外と知らない人が多いのですが、Google Chrome は 301 リダイレクトを永久キャッシュします。永久というのは1年先でも2年先でも、ユーザーがブラウザのキャッシュを削除しない限り、リダイレクト元がどうなっていようがリダイレクト先にアクセスしてしまうということです。
リダイレクト元へのHTTPサーバへのアクセスは勿論、DNSリクエストすら発生しません。
となると、もし間違って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/campaign/ [example.com]
すると、2020年のサマーキャンペーンのページにアクセスしていたユーザーの場合、2021年のお正月に新しくお正月キャンペーンにアクセスすると、https://example.com/old-campaign/2020-summer/rules [example.com] へのリダイレクトが発生してしまい、新しいキャンペーンのページにアクセスできなくなってしまいます。クリーンな環境では再現しないので問題に管理者が気が付かない可能性も高いです。
じゃあ、302リダイレクトするのが良いかというと、旧キャンペーンページは新しいURLに永久に変更になったわけなのでそれもおかしい話ですし、302リダイレクトだとGoogle等の検索エンジンへの登録も(少なくともしばらくの間は)旧URLのままになってしまいます。
'Cache-Control: no-store' を付けた301リダイレクトだと、検索エンジンの登録は新URLに変更されるし、ブラウザにはリダイレクトがキャッシュされないので、同じドメインでのリダイレクトや自分が所持し続けているドメイン間でのリダイレクトの場合には、301リダイレクト + no-store が現時点での最適解だと思います。
# 同一のドメイン間の301リダイレクトのキャッシュはせいぜい24時間とかにしてもらいたいものです。# 同一ドメインならばTLSコネクションなども再利用されるので、ロスタイムもせいぜい数ミリ秒~数十ミリ秒ですし、キャッシュする必要も無いです。# 永久キャッシュは凄く迷惑な仕様だと思います。
301は「ブラウザのブックマークを書き換えろ」って意味も含んでるので、そんなに気軽に使っていいものじゃないよ。同じURIを再利用するのは論外。
# 永久キャッシュは凄く迷惑な仕様だと思います。
301は"Moved Permanently"、「永久的な移動」でしょう?「永久にリダイレクトする」ではなく、「ターゲットリソースの位置が永久に移動した」という意味です。(その意味に従い、ブラウザはリダイレクトしたり、ブックマークを書き換えたりする)根本的に、使い方を間違えているだけだと思います。
そもそも、RFCに「メソッド定義や明示的なキャッシュ制御がないかぎり、規定値としてキャッシュ可能」とありますし。
Hypertext Transfer Protocol (HTTP/1.1) [ietf.org]
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
【注意喚起】Google Chrome は 301 リダイレクトを永久キャッシュするので要注意 (スコア:1)
意外と知らない人が多いのですが、Google Chrome は 301 リダイレクトを永久キャッシュします。
永久というのは1年先でも2年先でも、ユーザーがブラウザのキャッシュを削除しない限り、リダイレクト元がどうなっていようがリダイレクト先にアクセスしてしまうということです。
リダイレクト元へのHTTPサーバへのアクセスは勿論、DNSリクエストすら発生しません。
となると、もし間違って301リダイレクトしてしまうと、それが永久キャッシュされてしまい、取り返しがつかなくなります。
(間違った設定の期間にアクセスした人は、永遠に間違ったリダイレクトがされてしまい、正し
Re: (スコア:1)
"301 Moved Permanently" なんだから当然の動作では?
永久キャッシュが嫌なら "302 Found" か "307 Temporary Redirect" を使用すればよいだけです。
Re:【注意喚起】Google Chrome は 301 リダイレクトを永久キャッシュするので要注意 (スコア: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/campaign/ [example.com]
すると、2020年のサマーキャンペーンのページにアクセスしていたユーザーの場合、
2021年のお正月に新しくお正月キャンペーンにアクセスすると、
https://example.com/old-campaign/2020-summer/rules [example.com] へのリダイレクトが発生してしまい、
新しいキャンペーンのページにアクセスできなくなってしまいます。
クリーンな環境では再現しないので問題に管理者が気が付かない可能性も高いです。
じゃあ、302リダイレクトするのが良いかというと、旧キャンペーンページは新しいURLに永久に変更になったわけなのでそれもおかしい話ですし、
302リダイレクトだとGoogle等の検索エンジンへの登録も(少なくともしばらくの間は)旧URLのままになってしまいます。
'Cache-Control: no-store' を付けた301リダイレクトだと、検索エンジンの登録は新URLに変更されるし、ブラウザにはリダイレクトがキャッシュされないので、
同じドメインでのリダイレクトや自分が所持し続けているドメイン間でのリダイレクトの場合には、301リダイレクト + no-store が現時点での最適解だと思います。
# 同一のドメイン間の301リダイレクトのキャッシュはせいぜい24時間とかにしてもらいたいものです。
# 同一ドメインならばTLSコネクションなども再利用されるので、ロスタイムもせいぜい数ミリ秒~数十ミリ秒ですし、キャッシュする必要も無いです。
# 永久キャッシュは凄く迷惑な仕様だと思います。
Re: (スコア:0)
301は「ブラウザのブックマークを書き換えろ」って意味も含んでるので、そんなに気軽に使っていいものじゃないよ。同じURIを再利用するのは論外。
Re: (スコア:0)
301は"Moved Permanently"、「永久的な移動」でしょう?
「永久にリダイレクトする」ではなく、「ターゲットリソースの位置が永久に移動した」という意味です。
(その意味に従い、ブラウザはリダイレクトしたり、ブックマークを書き換えたりする)
根本的に、使い方を間違えているだけだと思います。
そもそも、RFCに「メソッド定義や明示的なキャッシュ制御がないかぎり、規定値としてキャッシュ可能」とありますし。
Hypertext Transfer Protocol (HTTP/1.1) [ietf.org]