短い答え
これはHTTP応答コードではありませんが、WhatWGによって、XMLHttpRequest
またはFetch応答のステータス属性の有効な値として文書化されています。
大まかに言って、これは、レポートする実際の HTTPステータスコードがない場合や、リクエストの送信中またはレスポンスの受信中にエラーが発生した場合に使用されるデフォルト値です。これが当てはまる可能性のあるシナリオには以下が含まれますが、これらに限定されません。
- リクエストはまだ送信されていないか、中止されました。
- ブラウザは応答ステータスとヘッダーの受信をまだ待っています。
- リクエスト中に接続が切断されました。
- 要求がタイムアウトしました。
- リクエストで無限リダイレクトループが発生しました。
- ブラウザは応答ステータスを認識していますが、Same-origin Policyに関連するセキュリティ制限のため、アクセスは許可されていません。
長い答え
まず、繰り返しますが、0はHTTPステータスコードではありません。RFC 7231のセクション6.1にそれらの完全なリストがあり、0は含まれていません。セクション6の紹介では、
status-code要素は3桁の整数コードです
これは0ではありません。
ただし、.status
XMLHttpRequestオブジェクトの属性の値として0 が文書化されていますが、関連するすべての詳細を追跡するのは少し難しいです。https://xhr.spec.whatwg.org/#the-status-attributeから始めて、.status
属性をドキュメント化します。
status
属性は返さなければなりませんレスポンスのステータスを。
それは空想的でトートロジーに聞こえるかもしれませんが、実際にはここに情報があります!このドキュメントでは、レスポンスではなくの.response
属性について説明しているXMLHttpRequest
ため、XHRオブジェクトのステータスの定義は、Fetch仕様のレスポンスのステータスの定義に委ねられていることを思い出してください。
しかし、どの応答オブジェクトですか?実際にまだ応答がない場合はどうなりますか?「応答」という単語のインラインリンクにより、https://xhr.spec.whatwg.org/#responseに移動します。
にXMLHttpRequest
関連付けられた応答があります。特に明記しない限り、これはネットワークエラーです。
したがって、ステータスが返されるのは、デフォルトではネットワークエラーです。XHR仕様で「set response to」という語句が使用されている場所をすべて検索すると、次の5か所に設定されていることがわかります。
見るとフェッチの標準、我々はそれを見ることができます:
ネットワークエラーがあるレスポンスその状況は常にあります0
XHR仕様で応答にネットワークエラーを設定する必要があると示されている場合は、XHRオブジェクトのステータスが0になることがすぐにわかります。(興味深いことに、これには、ボディのストリームが「エラー」になるケースが含まれます。Fetch仕様は、ステータスを受け取った後、ボディの解析中に発生する可能性があることを示しています。つまり、理論的には、XHRオブジェクトがそのステータスを持つ可能性がある200に設定すると、ボディの受信中にメモリ不足エラーなどが発生するため、ステータスを0に戻します。
また、Fetch標準では、ステータスが0と定義されている他のいくつかの応答タイプが存在し、その存在がクロスオリジンリクエストと同一オリジンポリシーに関連していることにも注意しています。
不透明なフィルタリングされた応答は、...ステータスが... であるフィルタリングされた応答です0
。
不透明なリダイレクトフィルター応答は、...ステータスが...のフィルター応答です0
。
(これらの2つの応答タイプに関するその他のさまざまな詳細は省略されています)。
しかし、これらを超えて、Fetchアルゴリズム(すでに見てきたXHR仕様ではなく)がブラウザーにネットワークエラーを返すよう要求するケースも多くあります。実際、「ネットワークエラーを返す」というフレーズは、Fetch標準で40回出現します。ここでは40をすべてリストするつもりはありませんが、次のものが含まれています。
- リクエストのスキームが認識されない場合(例:madeupscheme://foobar.comにリクエストを送信しようとしている)
- 不明確で不明確な指示「疑わしい場合は、ネットワークエラーを返す」。ftp://およびfile:// URLを処理するアルゴリズム
- 無限リダイレクト:「リクエストのリダイレクト数が20の場合、ネットワークエラーを返します。」
- 「httpRequestの応答の汚染が「cors」ではなく、要求と応答を含むクロスオリジンリソースポリシーチェックがブロックされた場合、ネットワークエラーを返す」など、CORS関連の一連の問題。
- 接続の失敗:「接続が失敗した場合は、ネットワークエラーを返します。」
言い換えれば、何かがうまくいかない時はいつでも、他のサーバーからの500や400のような実際のHTTPエラーステータスコードを取得するよりも、あなたはXHRオブジェクトに0の状態属性で終わるか、ブラウザで応答オブジェクトを取得します。スペックに列挙されている考えられる特定の原因の数は膨大です。
最後に:あなたはこの答えは完全に2020年に書き直され、あなたがに興味がある可能性がありということであったことを何らかの理由で、ノートのスペックの歴史に興味があれば、この答えの前のリビジョンのうち、本質的に同じ結論を解析され、XHRの古い(そして非常に単純な)W3仕様。これらが、この回答が参照するより近代的でより複雑なWhatWG仕様に置き換えられる前。