我有一个通过HTTP到服务的套接字连接。该服务只支持HTTP/1.0,默认情况下,在发送响应时关闭连接。在这个版本的协议中增加了一个参数- Connection: Keep-alive -使其成为可能。标准定义了服务也应该将这个参数附加到报头中。这是不发生的,响应头不包含它。
当我从套接字获得inputStream时,它不支持标记。那么,我可以安全地假设我将无法重用相同的连接来发送/接收多个请求/响应吗?
我无法控制服务,我手动构建请求。
Socket socket = new Socket("server.com", 11111);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
writer.write("POST HTTP/1.0rn");
writer.write("Host: " + socket.getInetAddress().getHostName() + "rn");
writer.write("Content-Length: " + length + "rn");
writer.write("Content-Type: text/xml; charset="utf-8"rn");
writer.write("Connection: Keep-alivern");
writer.write("rn");
writer.write(xmldata);
writer.flush();
List<String> lines = IOUtils.readLines(socket.getInputStream());
HTTP 1.0标准(RFC 1945)实际上并没有定义任何这样的东西。这是一个后添加的特性,服务器没有义务支持。