默认情况下,如果使用http客户端进行开机自检,则http客户端分为两个步骤,而不是直接启动开机自检请求。
发送包含Expect:100-continue的请求,询问服务器是否希望接受数据。
2 .接收服务器返回的100-continue响应后,将数据开机自检至服务器
于是,就会出现问题。 并非所有服务器都正确响应100-continue (例如lighttpd ),否则将返回417 “Expectation Failed”,导致逻辑错误
Expect:100-Continue握手的目的是让客户端在发送请求之前确定源服务是否希望接受
请求(基于请求标头)。
Expect:100-Continue握手在遇到不支持HTTP/1.1协议的服务器或代理时会出现问题,因此必须谨慎使用。
在HTTP客户端4.0中,是否激活Expect:100-Continue由HTTP请求执行参数http.protocol.expect-continue控制,也就是说请注意,默认情况下,在可以相应地激活或关闭expect的http客户端上处于活动状态。
让我们来看看Http1.1协议中对此的说明。
(100状态代码(见第10.1.1节) )的目的是让客户端在客户端发送此请求消息正文之前确定服务器是否接受来自客户端的消息正文。 在某些情况下,如果服务拒绝显示消息主体,则客户端不适合发送消息主体,或者效率会降低。 )
其实关键的Http1.1限制了先握手。 让我们考虑一下,是不是选择不握手就可以了。 当然可以。 处理方法如下
可以直接在Http请求之前添加这样的语句
system.net.servicepointmanager.expect 100 continue=false//不握手直接要求