1):Expect: 100-Continue:http.protocol.expect-continue
Expect 100 Continue其实是http协议1.1中的一个header属性, 就是说如果设置了Expect 100 Continue 那么就意味着客户端在向服务器发送数据的时候,需要先向服务器发起一个请求看服务器是否愿意接受客户端将要发送的数据(我们这里可以认为是http body,往往是较大的数据块)。
因为Expect 100 comtinue会导致客户端在向服务器发送数据是进行两次请求,这样对通信的性能方面将会受到一定的影响,但这种情况在做验证或者给予curl的服务器是很常见的,这也是该属性的主要应用场合。
介于以上原因,我们不能滥用该属性,并且在不支持http 1.1的协议的服务器也会产生一定的问题。
android:
httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter( HttpProtocolParams.USE_EXPECT_CONTINUE, false);
2)HTTP connection control:Close or Keep-Alive
看代码:
httpclient.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy() { @Override public long getKeepAliveDuration( HttpResponse response, HttpContext context) { long keepAlive = super.getKeepAliveDuration(response, context); if (keepAlive == -1) { // 如果keep-alive值没有由服务器明确设置,那么保持连接持续5秒。 keepAlive = 5000; } return keepAlive; } });
很明了:如果keep-alive值没有由服务器明确设置,那么保持连接持续5秒。
客户端可以这样设置,但是相对来说,服务端设置效率会更高。
在请求的时候设置参数,服务端进行处理:
httppost为例:
HttpPost httpost = new HttpPost(url); httpost.setHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_CLOSE);