2012-04-16 14 views
9

iOSプロジェクトでASIHTTPRequestを使用してRESTサーバーメソッド呼び出しを実行し始め、これまでに非常に成功しています。私はちょっと変わった断続的な問題があります。これは私のサーバーメソッドが呼び出されませんが発生した場合目的C - ASIHTTPRequestを使用したGETからのHTTP/0.9応答

HTTP/0.9 200 OK

:ごくまれに私は[ASIHTTPRequest startAsynchronous]を使用してから次の応答を取得します。通常、すべてのメソッド呼び出しは、「HTTP/1.1」を開始して応答を返します。私はGeoTrust/RapidSSL証明書を使ってHTTPSを使って接続を保護しています。興味深いことに、私はSSLポート(443)に接続しようとしたが、プロトコルとして 'http'を指定すると、同じ 'HTTP/0.9 200 OK'応答を得ることがわかりました。

ちょっとした情報を追加するだけです。問題は、アプリが一定期間アイドル状態になった後に発生します。例えば。リクエストが正常に完了した後、しばらくの間アイドル状態のままにしておけば、次のリクエストで問題が発生してもアプリは正常に動作し続けます。

何が起こっているかもしれないかについて誰かが何か光を当てることができますか?

多くのおかげで、 ジョナサン

UPDATE:問題が発生したとき、私はASIHTTPRequestによって、いくつかのデバッグ情報出力の下に貼り付けました:

この場合、IOSの詳細について不明な点
2012-07-12 09:35:49.376 mytestapp[3038:18f07] [CONNECTION] Closing connection #13 because it has expired 
2012-07-12 09:35:49.377 mytestapp[3038:18f07] [CONNECTION] Closing connection #14 because it has expired 
2012-07-12 09:35:49.378 mytestapp[3038:18f07] [CONNECTION] Closing connection #15 because it has expired 
2012-07-12 09:35:49.380 mytestapp[3038:18f07] [CONNECTION] Request #39 will use connection #16 
2012-07-12 09:35:49.381 mytestapp[3038:18f07] [CONNECTION] Request #40 will use connection #17 
2012-07-12 09:35:49.382 mytestapp[3038:18f07] [CONNECTION] Request #41 will use connection #18 
2012-07-12 09:35:49.529 mytestapp[3038:18f07] [STATUS] Request <ASIHTTPRequest: 0x88a1e00> finished downloading data (0 bytes) 
2012-07-12 09:35:49.529 mytestapp[3038:18f07] [STATUS] Request <ASIHTTPRequest: 0x88a1e00> received response headers 
2012-07-12 09:35:49.530 mytestapp[3038:18f07] [AUTH] Request <ASIHTTPRequest: 0x88a1e00> has passed Basic authentication 
2012-07-12 09:35:49.530 mytestapp[3038:18f07] [CONNECTION] Got no keep-alive header, will keep this connection open for 60.000000 seconds 
2012-07-12 09:35:49.530 mytestapp[3038:18f07] [CONNECTION] Request #41 finished using connection #18 
2012-07-12 09:35:49.531 mytestapp[3038:18f07] [STATUS] Request finished: <ASIHTTPRequest: 0x88a1e00> 
2012-07-12 09:35:49.531 mytestapp[3038:15803] responseHeaders={ 
} 
2012-07-12 09:35:49.531 mytestapp[3038:18f07] [STATUS] Request cancelled: <ASIHTTPRequest: 0x88a1e00> 
2012-07-12 09:35:49.532 mytestapp[3038:18f07] [STATUS] Request cancelled: <ASIHTTPRequest: 0x88a0200> 
2012-07-12 09:35:49.532 mytestapp[3038:18f07] [STATUS] Request <ASIHTTPRequest: 0x88a0200>: Cancelled 
2012-07-12 09:35:49.532 mytestapp[3038:18f07] [CONNECTION] Request #39 failed and will invalidate connection #16 
2012-07-12 09:35:49.533 mytestapp[3038:18f07] [STATUS] Request cancelled: <ASIHTTPRequest: 0x88a0a00> 
2012-07-12 09:35:49.533 mytestapp[3038:18f07] [STATUS] Request <ASIHTTPRequest: 0x88a0a00>: Cancelled 
2012-07-12 09:35:49.533 mytestapp[3038:18f07] [CONNECTION] Request #40 failed and will invalidate connection #17 
+2

サーバー側について教えてください。実際にネットワークデータストリームをWiresharkなどのパケットスニッファーでチェックすることによって、サーバーが誤動作しているということは絶対に100%と断定しましたか? – pmdj

+0

ISPがプロキシを使用している可能性はありますか? – Lefteris

+0

"validatesSecureCertificate = NO;"を設定しようとしましたか? – endy

答えて

2

が、HTTP 0.9は完全にあります放棄された。これは明確な理由があります。「Host:」ヘッダーをサポートしていません。これは、単一のIPが仮想ホストをまったく持つことができないことを意味します。そのようなものは90年代の終わりに時代遅れになった。

このような反応は、決して現実には起こりません。それでも問題が発生した場合、一部のクライアントは「GET/HTTP/0.9」のような要求を出しました。しかし、これらのクライアントは〜15年前に姿を消しました。

SSLはHTTPがあまり気付いていないものです。だから私はこれが関連していないと信じています。 SSLトンネルが設定され、その後、通常のHTTPが実行されます。

結論として、あなたや誰かが時代遅れの方法を引き起こしたと言います。そしてIOSは多分それをどうするべきか分かりません。たぶん、IOSメソッドは、ホスト名を含む制限されたメソッドなので、トリガーしません。とにかく、クライアントが実際に0.9を話しているのであれば、それについて心配するべきではありません。とにかく、ほとんどのサイトから適切な答えが得られないからです。クライアントの発言1.1とあなたが0.9と答えると、何らかの理由でリクエストが誤解され、最も可能性の低いHTTPバージョンへのフォールバックメカニズムが発生します。おそらく、あなたは要求のホスト名を設定するのを忘れていたか、それとも構文エラーがありましたか?

1

ウェブ上でこの問題に関するいくつかの言及がありますが、基本的には永続的な接続に関連し、Content-Lengthヘッダーとバグのあるサーバーによって返されたコンテンツ自体に問題があるときに関係します。ブラウザやiOSフレームワークを台無しにする可能性があり、実際にヘッダーに気づくことはありません。

ここにはone of the possible explanationsがあります。

永続的な接続を無効にすることをお勧めします。このadviceはASIHTTPRequestの開発者から来ました(全く同じ状況です)。

[httpRequest setShouldAttemptPersistentConnection:NO]; 
+0

こんにちは、お返事ありがとうございます。永続的な接続、Cookieの永続性、キーチェーンの永続性、セッションの永続性、キャッシングなどを無効にしようとしましたが、問題はまだ発生しています。 –

0

HTTP/0.9 200 OKは、存在しないメッセージヘッダーです。 HTTP/0。9は要求として定義されます:GET <Request-URI> HTTP/0.9 <CRLF>、応答は[Entity-Body]です。ステータス行もヘッダーもありません。 (< urn:ietf:rfc:1945 >)

ソフトウェアのどこかにエラーがあります。リクエストが失敗したか、まだ受信されていないと思います。

関連する問題