本文阅读大概需要 2 分钟
当使用cURL请求服务时,会执行 :
1 | $response = curl_exec($ch); |
通过对request/response的打印可以获取以下信息:
Request:
1 | POST /item/save HTTP/1.1 |
Response:
1 | HTTP/1.1 100 Continue |
通常我们在对response进行header和body的拆分的时候由于多返回了一段header,则会导致解析响应body的时候出现问题。
常见的浏览器不会发送Expect
消息头,但是其他类型的客户端如cURL默认会这么做。
Expect 是一个请求消息头,包含一个一个期望条件,表示服务器只有在满足此期望条件的情况下才能完成请求处理。
目前HTTP规范只规定了一个期望条件,即Expect:100-continue
,对此服务器可以做以下回应:
100
如果消息头中的期望条件可以得到满足,请求可以顺利进行417
(Exceptation Failed)如果服务器不能满足期望条件的话,也可以返回人任意其他(4xx)错误码
Expect: 100-continue
即通知接收方客户端要发送一个体积可能很大的消息体,期望收到状态码为100
(Continue)的临时回复。
服务器通过返回一个状态码为100
(Continue)的回复告知客户端可以继续发送消息体。
所以希望解决上面的问题,我们可以主动发送一个空的Expect
请求头即可:
1 | curl_setopt($ch, CURLOPT_HTTPHEADER, ['Expect:']); |