場合によっては、同じページに302リダイレクトを送り返したいと思います。たとえば、ランダムなデータストアエラーが発生した場合、それらを同じページにリダイレクトして自動的に再試行できます。あなたがいる同じページに302リダイレクトを送信するのはブラウザ間で安全ですか?
これをFirefoxとChromeでテストしたところ、うまくいきましたが、他のブラウザでも問題が発生するかどうかは疑問です。
場合によっては、同じページに302リダイレクトを送り返したいと思います。たとえば、ランダムなデータストアエラーが発生した場合、それらを同じページにリダイレクトして自動的に再試行できます。あなたがいる同じページに302リダイレクトを送信するのはブラウザ間で安全ですか?
これをFirefoxとChromeでテストしたところ、うまくいきましたが、他のブラウザでも問題が発生するかどうかは疑問です。
これは一般的には機能しません。 HTTP specificationはちょうどそれこれが行われなければならないかについて
無限のリダイレクトループを検出する必要があり、クライアント、
が、何も言います。最初のリダイレクト時にサイクルが存在し、すぐにエラーが発生したことを検出することは、完全に標準の範囲内になります。
(サーバーですので、また、なぜ単に再試行を自分でしない?)
いいえ、あなたは任意のブラウザが同じパスに302与えられたページをリロードすることを考えに頼ることはできません。 HTTPスペックに従い、リクエストを再試行しないで、無限のリダイレクトループが発生したことをユーザーに伝えるユーザーもいます。
このため、JavaScriptの場所のリダイレクトを使用する方がよい場合があります。
最終的には、正しい応答を得るために必要な限り、ユーザーの要求が応答を待つようにする必要があります。したがって、データストアにアクセスできない場合は、データストアに到達して応答を作成するか、選択したしきい値でタイムアウトしてユーザにエラーが発生するまで、Webアプリケーションはリクエストに応答するのを止めておく必要がありますたとえば、500または404となります。
404はGONE(410)ではなく、「404エラーは、要求されたリソースが将来再利用可能であることを示します。 503が問題の可能性があります。
404はまた、その最初の桁によって、クライアントが失敗の責任を負うことを示す。ここではそうではないので、適切な応答は5xxシリーズのものです。 –
私の見解では、すべてのエラーコードは、ユーザーがサーバー上で責任を負うエラーを示しています。責任は仕様の言語ではありません:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 – dlamblin
FWIW、誰もあなたにこれをしないように言っているにもかかわらず(私は同意しがちですが)、この種のものはいくつかの主要なウェブサイトで使用されています。あなたがしなければならないことの1つは、302上のヘッダーがレスポンスがキャッシュ可能でないことを示すことです。おそらく、現在のページのヘッダーがキャッシュ可能でないようにすることも必要です。 – EricLaw