expect 100 continue

100-continue 是用于客户端在发送 post 数据给服务器时,征询服务器情况,看服务器是否处理 post 的数据,如果不处理,客户端则不上传 post 是数据,反之则上传。在实际应用中,通过 post 上传大数据时,才会使用到 100-continue 协议。
客户端策略
如果客户端有 post 数据要上传,可以考虑使用 100-continue 协议。在请求头中加入 {“Expect”:”100-continue”}
如果没有 post 数据,不能使用 100-continue 协议,因为这会让服务端造成误解。
并不是所有的 Server 都会正确实现 100-continue 协议,如果 Client 发送 Expect:100-continue 消息后,在 timeout 时间内无响应,Client 需要立马上传 post 数据。
有些 Server 会错误实现 100-continue 协议,在不需要此协议时返回 100,此时客户端应该忽略。
服务端策略
正确情况下,收到请求后,返回 100 或错误码。
如果在发送 100-continue 前收到了 post 数据(客户端提前发送 post 数据),则不发送 100 响应码(略去)。
参考RFC文档:http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3



WebClient进行post发送数据的时候.总是无响应.发现请求头加上这句话后就无响应了.Expect: 100-continue ServicePointManager.Expect100Continue = false;
直接写这句代码就可以



打印了ngx.req.get_headers() 查看http的请求头。发现耗时过长的那条请求中有一个信息。
{“Expect”:”100-continue”}
当请求中的content_leght大于1024的时候, libcurl会向服务端做一个确认,确认服务端是否能处理这个信息,确认成功之后再传数据。目的是为了防止资源的浪费,传过去之后发现处理不了。
结果就多了一步来回确认的过程。造成了浪费




Category web