2011-08-11 9 views
2

場合によっては、同じページに302リダイレクトを送り返したいと思います。たとえば、ランダムなデータストアエラーが発生した場合、それらを同じページにリダイレクトして自動的に再試行できます。あなたがいる同じページに302リダイレクトを送信するのはブラウザ間で安全ですか?

これをFirefoxとChromeでテストしたところ、うまくいきましたが、他のブラウザでも問題が発生するかどうかは疑問です。

+0

FWIW、誰もあなたにこれをしないように言っているにもかかわらず(私は同意しがちですが)、この種のものはいくつかの主要なウェブサイトで使用されています。あなたがしなければならないことの1つは、302上のヘッダーがレスポンスがキャッシュ可能でないことを示すことです。おそらく、現在のページのヘッダーがキャッシュ可能でないようにすることも必要です。 – EricLaw

答えて

1

これは一般的には機能しません。 HTTP specificationはちょうどそれこれが行われなければならないかについて

無限のリダイレクトループを検出する必要があり、クライアント、

が、何も言います。最初のリダイレクト時にサイクルが存在し、すぐにエラーが発生したことを検出することは、完全に標準の範囲内になります。

(サーバーですので、また、なぜ単に再試行を自分でしない?)

+0

ヘニングはそれがうまくいかないことを意味します。こんなことしないで。 – dlamblin

+0

@dlambin:十分に公正。私は結論をより明示するように編集しました。 –

+0

私はApp Engineを利用しているため、リクエストを処理するのに費やす時間が30秒に制限されているため、サーバー側を再試行しません。これは特定の場合に当てはまる可能性があります。おそらく、私はリダイレクトするURLに未使用のクエリ文字列変数を追加するだけです。それはうまくいくはずですか? – Kyle

0

いいえ、あなたは任意のブラウザが同じパスに302与えられたページをリロードすることを考えに頼ることはできません。 HTTPスペックに従い、リクエストを再試行しないで、無限のリダイレクトループが発生したことをユーザーに伝えるユーザーもいます。
このため、JavaScriptの場所のリダイレクトを使用する方がよい場合があります。

最終的には、正しい応答を得るために必要な限り、ユーザーの要求が応答を待つようにする必要があります。したがって、データストアにアクセスできない場合は、データストアに到達して応答を作成するか、選択したしきい値でタイムアウトしてユーザにエラーが発生するまで、Webアプリケーションはリクエストに応答するのを止めておく必要がありますたとえば、500または404となります。

404はGONE(410)ではなく、「404エラーは、要求されたリソースが将来再利用可能であることを示します。 503が問題の可能性があります。

+0

404はまた、その最初の桁によって、クライアントが失敗の責任を負うことを示す。ここではそうではないので、適切な応答は5xxシリーズのものです。 –

+0

私の見解では、すべてのエラーコードは、ユーザーがサーバー上で責任を負うエラーを示しています。責任は仕様の言語ではありません:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 – dlamblin

関連する問題