Keep Alive で HTTP 接続を再利用しようとしています。サーバーは Keep Alive をサポートしています。私は Connection: Keep-Alive HTTP ヘッダーを送信しますが、応答を受信した直後に接続が FIN (Android クライアントによって開始) のままです。いくつかの助けをいただければ幸いです。
ここにいくつかのコード:
DefaultHttpClient client = new DefaultHttpClient();
client.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy());
client.setReuseStrategy(new DefaultConnectionReuseStrategy());
HttpParams params = client.getParams();
ClientConnectionManager mgr = client.getConnectionManager();
client = new DefaultHttpClient(new ThreadSafeClientConnManager(params, mgr.getSchemeRegistry()), params);
HttpPost post = new HttpPost(URL);
post.setHeader("Connection","Keep-Alive");
ByteArrayEntity entity = new ByteArrayEntity(requestBundle.postString().getBytes());
entity.setContentType("application/xml");
post.setEntity(entity);
HttpResponse response = client.execute(post);
HTTP 要求ヘッダーを確認すると、次のように表示されます。
Connection: Keep-Alive\r\n
Content-Length: 459\r\n
Content-Type: application/xml\r\n
Host: xxx.yyy.com\r\n
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)\r\n
HTTP 応答ヘッダーには、次のように表示されます。
HTTP/1.1 200 OK\r\n
Content-Type: application/xml\r\n
Content-Length: 8049\r\n
Date: Tue, 22 Jan 2013 03:14:40 GMT\r\n
Server: lighttpd/1.4.31\r\n
回線を通過する応答やその他の TCP パケットを見ると、Android クライアントが、私が認識していない HTTP クライアント設定に基づいて FIN を開始していることは明らかです。これは、サーバーの Keep-Alive 設定が原因ではありません ( HTTP 応答にヘッダー「Connection: close」が含まれていません)。
教えてください!
乾杯、アンドレイ