100---继续请求

所有1开头的状态码都标识临时响应,http 100表示请求者可以继续发出请求,服务器回复此状态码表明它已经请求的第一部分,正在等待其余部分。

想要理解http 100状态码,先要了解这样的应用场景:你向服务器发送请求,这个过程中,需要发送一个实体,所谓实体你可以理解为要post一段数据,但是你不确定服务器是否会接收这份数据,也许数据太大了,服务器拒绝接收,或者数据类型不符合要求,总之存在一定的可能性被服务器拒绝接收。

在这种情况下,http协议允许你试探性的先发送一个不包含实体的请求,但是要在请求头里增加一个Expect首部,其内容为

Expect:100-Continue

服务器在收到请求后,如果决定接收实体,就可以返回100状态码,表示愿意接收实体数据。

这样做的好处在于,避免了向服务器发送原本不被接收的数据,这样做是不恰当的,而且低效。

关于http 100状态码,有几个关键问题需要你注意:

  1. http1.0 并不支持1开头的状态码
  2. 客户端在付出包含Expect首部的请求后,不应该一直等待,超出一定时间后,应当果断的将实体发送出去
  3. 服务端收到请求后,或者用100 Continue响应,或者用错误码响应;如果客户端发送的情况不包含Expect:100-Continue, 那么服务端永远不应该返回100状态码;如果在服务器返回100状态码之前收到了客户端的实体数据,那么就没有必要返回100状态码了。
  4. 对于http代理服务器,如果收到了带有Expect:100-Continue的请求,如果它知道下一跳服务器的http版本是1.0,那么就必须禁止转发这个请求,返回417状态码;如果它知道下一跳服务器的http版本是1.1或者更高,或者它不知道下一跳的http版本,那么应该转发该请求

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案