fetch や XMLHttpRequest などの JavaScript ネットワーク呼び出し、またはその他の種類の HTTP ネットワーク要求が HTTP ステータス コード 0 で失敗することは何を意味しますか?
HTTP 仕様では他のコードは 3 桁であるため、これは有効な HTTP ステータス コードではないようです。
テストとして、ネットワークを完全に切断してみました。関係ないかもしれませんが、ステータス コード 17003 (IIRC) が表示されました。ざっと調べたところ、これは「DNS サーバーの検索に失敗しました」という意味のようです。
同じコードが一部の場所やシステムでは正常に動作しますが、特定の環境ではステータス コード 0 で失敗し、responseText が提供されません。
これは、インターネット URL への典型的な HTTP POST です。file:// は含まれませんが、Firefox では成功を示す 0 が返される可能性があると理解しています。
ベストアンサー1
ここでの答えの多くは間違っています。人々は、特定のケースで status==0 の原因が何であるかを突き止め、それを答えとして一般化しているようです。
実際には、失敗した XmlHttpRequest の status==0 は未定義のエラーと見なす必要があります。
実際の W3C 仕様では、ゼロが返される条件が次のように定義されています。https://fetch.spec.whatwg.org/#concept-network-error
仕様 (fetch または XmlHttpRequest) からわかるように、このコードはサーバーに接続する前に発生したエラーの結果である可能性があります。
このステータス コードが生成される一般的な状況のいくつかは他の回答にも反映されていますが、次の問題のいずれかが原因である場合も、いずれの問題でもない場合もあります。
- 不正なクロスオリジンリクエスト(CORS)
- ファイアウォールのブロックまたはフィルタリング
- リクエスト自体はコードでキャンセルされました
- インストールされたブラウザ拡張機能が問題を起こさせている
ブラウザが、こうした status==0 のシナリオについて詳細なエラー レポートを提供すると役立つでしょう。確かに、status==0 には役立つコンソール メッセージが付随する場合もありますが、その他の場合には他の情報はありません。