服务端接收到header 是expect:100-continue,进行验证信息,判断是否可以通过验证
如果可以通过验证,返回status 100
如果通过了是不是客户端发送的是第二次http请求?还是继续这次http请求?
这种判断,服务端程序该怎么写呀,如果是两次,http协议是无状态的,怎么将两次请求联系到一起?
服务端接收到header 是expect:100-continue,进行验证信息,判断是否可以通过验证
如果可以通过验证,返回status 100
如果通过了是不是客户端发送的是第二次http请求?还是继续这次http请求?
这种判断,服务端程序该怎么写呀,如果是两次,http协议是无状态的,怎么将两次请求联系到一起?
15 回答8.3k 阅读
7 回答5.2k 阅读
6 回答6.9k 阅读✓ 已解决
5 回答4.8k 阅读✓ 已解决
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
HTTP无状态决定了本质上无法继续上次的HTTP请求。
首先,客户端先发送了一个请求,这个请求的header中包含了一个属性
expect: 100-continue
。这种情况一般出现于上传大容量body或者是需要验证的时候。这时服务器会读取请求的header并返回一个100 continue
的响应,如果服务器可以提供这项服务的话。客户端再将http请求发送回去。然后服务器会读取请求的body并且在成功后返回200
状态码。如果出于验证的目的发出
expect:100-continue
,那么你只需在认证通过之后的下一次请求中携带上你的认证信息(authorization等等)即可。如果是出于询问服务器是否能够完成自己的请求,比如是不是能够向它发送一个类型为
video/mp4
的大文件时,则第二次正常发送body为这个文件的http请求即可。这里使用expect:100-continue
的原因在于避免大文件传送失败带来的带宽浪费。第一次发送的询问请求可以只有一个header,如果服务器拒绝提供这个服务,则无需继续发送大文件。