web-dev-qa-db-ja.com

HTTPステータスコード0 - エラードメイン= NSURLErrorDomain?

私はiOSプロジェクトに取り組んでいます。

このアプリケーションでは、サーバーから画像をダウンロードしています。

問題:

画像をダウンロードしている間に私が取得しています Request Timeout 。ドキュメントによると、リクエストタイムアウトのHTTPステータスコードは408です。

しかし、私のアプリケーションでは、HTTPステータスコード0を次のエラーで受け取ります。

"エラードメイン= NSURLErrorDomain Code = -1001"要求がタイムアウトしました。 " UserInfo = 0xb9af710 {NSErrorFailingURLStringKey = http://xxxx.com/resources/p/PNG/1383906967_5621_63.jpg 、NSErrorFailingURLKey = http://xxxx.com/resources/p/PNG /1383906967_5621_63.jpg 、NSLocalizedDescription =リクエストがタイムアウトしました。、NSUnderlyingError = 0x13846870 "リクエストがタイムアウトしました。"}

インターネットで検索中に、HTTP Status Code 0に関する情報が見つかりませんでした。

誰かが私にこれを説明できますか?

81
Irfan DANISH

HTTPステータスコード0はありません。表示されるのは、使用しているAPI /ライブラリから返された0です。そのためにはドキュメントを確認する必要があります。

79
Julian Reschke

NSHTTPURLResponseオブジェクトの状況コード0は、一般に応答がなかったことを意味し、さまざまな理由で発生する可能性があります。これは有効なHTTPステータスコードではないため、サーバーはステータス0を決して返しません。

あなたの場合は、リクエストがタイムアウトして0がプロパティのデフォルト値にすぎないので、ステータスコード0を取得するのは表示されているです。タイムアウト自体は、サーバーが単純に時間内に応答しない、ファイアウォールによってブロックされている、ネットワーク接続全体が停止しているなど、さまざまな理由が考えられます。通常後者の場合、電話はそれがネットワーク接続を持っていないことを知るのに十分スマートで、すぐに失敗するでしょう。ただし、見かけのステータスコード0で失敗します。

ステータスコードが0の場合、実際のエラーはNSErrorではなく、返されたNSHTTPURLResponseオブジェクトに記録されます。

私の経験では、HTTPステータスの408はあまり一般的ではありません。私は自分と出会ったことがない。しかし、クライアントがサーバーへのアクティブなソケット接続を維持する必要があり、サーバーがオープンソケットを介してより多くのデータを送信するためにクライアントを待機している場合に使用されますサーバーは408ステータスコードで接続を終了し、基本的にクライアントに「時間がかかり過ぎた」と伝えます。

61
devios1

IOS SDKの場合あなたのAPIがタイムアウトすると、あなたはそのためにステータス0を得ます。

10

応答は空でした。ほとんどの場合、コードは1xx、2xx、3xx、4xx、5xxと表示されます。

HTTPステータスコード一覧

8
VDN

私の限られた経験から、私は次の2つのシナリオがstatus code: 0の応答を引き起こす可能性があることを思い出してください。それらはもっとあるかもしれませんが、私はそれら2つを知っています:

  • あなたの接続はおそらくゆっくり反応します。
  • またはバックエンドサーバーが利用できない可能性があります。

つまり、status: 0は少し一般的なもので、空のレスポンスボディをトリガーするより多くのユースケースになる可能性があります。

5
Simple-Solution

HTTPレスポンス0は標準のHTTPレスポンスではありません。しかし、クライアントがサーバーに接続できなかったためにタイムアウトが発生したことを示しています。

3
shuaib ahmad

エラーが発生しました。

GET http://localhost/pathToWebSite/somePage.aspx http.status:0エラーが発生しました

その呼び出しは、VBSファイルを呼び出すWindowsタスクから行われるので、問題をトラブルシューティングするために、URLをブラウザに向け、プライバシーエラーを受け取ります。

あなたのつながりは非公開です

攻撃者があなたの情報をlocalhostから盗もうとしている可能性があります(パスワード、メッセージ、クレジットカードなど)。 NET :: ERR_CERT_COMMON_NAME_INVALID

潜在的なセキュリティ問題の詳細を自動的にGoogleに報告します。プライバシーポリシー安全性に戻るこのサーバーはローカルホストであることを証明できませんでした。そのセキュリティ証明書は* .ourdomain.comからのものです。これは、設定の誤りや攻撃者が接続を傍受したことが原因である可能性があります。もっと詳しく知る。

これは、接続にhttpsを使用させるためのIIS URL書き換えルールが設定されているためです。そのルールは http:// localhost から https:// localhost に転換しますが、私たちのSSL証明書はlocalhostではなく外向きのドメイン名に基づいているため、次のように報告されます。そのため、プライバシーエラーがこのステータスコード0の非常にあいまいな理由になる可能性があります。

私たちの場合の解決策はlocalhostのルールに例外を追加し、 http://localhost/pathToWebSite/somePage.aspx にhttpを使用させることでした。あいまいな、はい、しかし私は来年この年に遭遇し、今私はグーグル検索で私の答えを見つけるでしょう。

2
Jeff Mergler

ステータスコード '0'は、の理由で発生する可能性があります
1)クライアントサーバーに接続できません
2)クライアント応答を受信できないタイムアウト期間内
3)要求はクライアントによって"停止(中止)"されました。

しかし、これら3つの理由は標準化されていません

1

私の場合はCORSです。

私は一度iOSアプリでそのような反応をしました。解決策は、ヘッダにAccess-Control-Allow-Origin: *がないことでした。

もっと: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

1
olivier

ゲートウェイタイムアウトでは、ステータスはエラーコールバックでゼロになります。

.error( function( data,status,headers,config){
    console.log(status) 
 }

HTTPステータスコード

0
Prashobh

私は、Javaスクリプトajaxクライアントとnodejs Expressアプリケーションサーバーを持っています。

クライアントコードは次のようになります。

...
var status1 = xmlHttpRequest.status;
...

サーバーコードは次のようになります。

...
// An exception here results HTTP status codes in status1 (at client side above)
...
...
var reqDb = http.request(options, requestCompleteCallback);
...
...
function requestCompleteCallback(response) {
    ...
    // An exception here results in 0 in status1 (at client side above)
    ...
}

これを理解するための30分の苦労。
この記事が誰かに役立つことを願っています。

頑張ってください。

あなたがネットワークで404、401、500等のエラーステータスを見ることができるとしても時々ブラウザはステータスを0に設定したError Objectでhttpエラーハンドラに応答します。

アプリケーションとAPIが異なるドメインにある場合、これが発生する可能性があります - CORSメカニズムが適用されます。各APIリクエストのCORSによると、ブラウザは2つのリクエストを送信します。

  1. aPIがActual/Originリクエストを許可するかどうかを理解するためのプリフライトOPTIONSリクエスト。
  2. aPIが許可する場合(OPTIOSリクエストはステータス204で応答し、正しいAccess-Control-Allow-Originヘッダーで応答します) - ブラウザは次の "Actual/Origin request"を送信します。

アプリケーションでは、 "Actual/Origin request"のエラー応答を処理しています。 "preflight OPTIONS request"が失敗した場合 - ブラウザはhttpエラーハンドラに対して正しいHttpErrorオブジェクトを提供しません。 httpレスポンスの正しいステータスを取得するために - 成功プリフライトOPTIONSリクエストレスポンスを取得するようにしてください。

0
Dmitriy Kusch