XHRリクエストへの応答としてリダイレクトを返す


回答:


216

ブラウザがajaxリクエストへのリダイレクト応答を受け取った場合はどうなりますか?

サーバーがリダイレクト(別名302応答とLocation:ヘッダー)を送信した場合、リダイレクトはブラウザーによって自動的に実行されます。2番目の要求への応答(これも別のリダイレクトではないと想定)は、プログラムに公開されます。

実際、302応答が発生したかどうかを検出することはできません。302リダイレクトが200につながる場合、プログラムは、元のリクエストが直接200につながる場合と同じように動作します。

これは私の経験であり、仕様で指摘されている動作でもあります。

2016年の更新:時間が経過しました。良いニュースとして、新しいfetch()APIは、リダイレクトの処理方法よりきめ細かく制御できるようになっており、デフォルトの動作はXHRと似ています。つまり、fetch()がネイティブに実装されている場合にのみ機能しますXHRに基づくfetch()のポリフィルバージョンには、引き続きXHRの制限があります。幸いにも、ネイティブブラウザーのサポートはうまく機能しているようです。


47
興味深いことに、リダイレクトが追跡されていないように見える状況が発生しているため、ここに到達しました...これは、リダイレクトが同じ発信元ポリシーに違反している場合に発生します。
ガス2013年

4
@Gusはおそらく論理的
Dmitry

1
401へのリダイレクト(または任意の4xxまたは5xxエラー)の場​​合、プログラムはリクエストが直接401につながるかのように動作すると思います。
グリム2014年

2
RESTful APIは、POSTリクエストの後に201とLocationヘッダーを送信できます。restapitutorial.com/lessons/httpmethods.htmlを参照してください。

1
2019年の更新:3年前に予想していたようにフェッチが機能しません):
lcjury

7

ajax-requestそのリダイレクト私の知る限りに従います。実際のコンテンツ(.responseText.responseXML)は、リダイレクト先のページのコンテンツです。

2または3でリダイレクト(status-codelocation-header)をインターセプトできる可能性がありますがreadyState、それについては不明です。


いいえ、これらすべての州はまったく同じステータスです。の値もgetAllResponseHeaders()同じです。
sebastianwagner 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.