本帖最后由 小哲 于 2016-12-3 16:43 编辑
在使用httphelper默认情况下做POST的时候, httphelper并不会直接就发起POST请求, 而是会分为俩步,
1.发送一个请求, 包含一个Expect:100-continue, 询问Server使用愿意接受数据, 2.接收到Server返回的100-continue应答以后, 才把数据POST给Server 于是,这样就有了一个问题, 并不是所有的Server都会正确应答100-continue, 比如lighttpd, 就会返回417 “Expectation Failed”, 则会造成逻辑出错
Expect:100-Continue握手的目的,是为了允许客户端在发送请求内容之前,判断源服务器是否愿意接受
请求(基于请求头部)。
Expect:100-Continue握手需谨慎使用,因为遇到不支持HTTP/1.1协议的服务器或者代理时会引起问题。
而HttpClient 4.0中,是否激活Expect:100-Continue,是由HTTP请求执行参数http.protocol.expect-continue来控制的,通过设置参数值为true或者false,可以相应的激活或者关闭Expect:100-Continue握手。注意,在HttpClient中,默认是激活的
其实关键就在的Http1.1先握手的问题,在httphelper设置下这个属性值就好了。 [C#] 纯文本查看 复制代码 Expect100Continue=false //不握手直接请求
如果是HttpClient设置下
[C#] 纯文本查看 复制代码 System.Net.ServicePointManager.Expect100Continue = false
|