回答:
XMLHttpRequestオブジェクトのW3C標準に従っていない(強調が追加されています):
応答がHTTPリダイレクトの場合:
Locationヘッダーによって伝えられたURLの起点がXMLHttpRequestの起点と同じ起点であり、リダイレクトが無限ループの予防策に違反していない場合は、同じ起点のリクエストイベントルールに従って、リダイレクトを透過的に実行します。
彼らは将来のリリースのためにそれを検討していました:
この仕様には、この仕様の将来のバージョンで検討されている次の機能は含まれていません。
- 次のリダイレクトを無効にするプロパティ。
しかし、最新の仕様ではこれについては触れられていません。
新しいAPIの取得サポートにリダイレクト処理の異なるモードを:follow
、error
、とmanual
、私はリダイレクトがキャンセルされたときに新しいURLまたはステータスコードを表示する方法を見つけることができません。リダイレクト自体を停止すると、エラー(空の応答)のように見えます。それで十分なら、行ってもかまいません。また、このAPIを介して行われたリクエストはまだキャンセルできないことにも注意してください。 彼らは今です。
XMLHttpRequestについてはHEAD
、サーバーを使用して、URLが変更されたかどうかを検査できます。
var http = new XMLHttpRequest();
http.open('HEAD', '/the/url');
http.onreadystatechange = function() {
if (this.readyState === this.DONE) {
console.log(this.responseURL);
}
};
http.send();
ステータスコードは取得できませんが、ページ全体をダウンロードせずに新しいURLを見つけることができます。
OPTIONS
する方が良い選択である場合があります。いずれにせよ、汎用ではない場合にのみ機能します。管理者は
responseURL
プロパティを使用してリダイレクト先を取得したり、応答が最終的に受け入れた場所からフェッチされたかどうかを確認したりできます。
もちろんこれはとにかく結果がフェッチされることを意味しますが、少なくともリダイレクト先に関する必要な情報を取得できます。たとえば、応答を破棄したい場合の条件を検出できます。
XMLHttpRequestによって公開されたAPIには、301または302を自動的にフォローするというデフォルトの動作をオーバーライドできる場所はありません。
クライアントがWindowsでIEを実行している場合は、代わりにWinHTTPを使用して、その動作を防止するオプションを設定できますが、これは非常に制限的なソリューションです。