用HTTP支持HTTP 100 Continue with PHP在2010年提出了这个问题,重点稍有不同(它寻求的是PHP解决方案,而不是Apache解决方案),但从未解决。
HTTP / 1.1规范创建了请求标头“ Expect”,该标头具有一个已定义的值;即“ 100-继续”。2014年6月发布的修订版HTTP / 1.1 RFC(请参阅RFC 7231第5.1.1节)规定如下:
100连续期望值通知接收者该客户端即将在此请求中发送(可能很大)消息正文,并且如果请求行和标头字段不足以导致立即发送,则希望接收100(连续)临时响应成功,重定向或错误响应。这允许客户端在实际发送之前等待值得发送消息正文的指示,这可以提高效率,当消息正文很大或客户端预计可能发生错误时(例如,在发送状态时)第一次更改方法,而无需事先验证的身份验证凭据。
这也是一个普遍接受的声明,说明该部分的内容已被服务器和客户端完美地实现了。修订后的规范甚至暗示了这一点:
...但是,客户端尚未使用扩展机制,许多服务器尚未实现必须理解的要求 ...
重点是我的,而不是规范
即使不包括此标头的扩展机制,100连续值似乎也实现不佳。如果我们考虑使用标准的PHP / Apache堆栈,那么如果客户端请求,Apache会提供100个连续的临时响应。
但是,它仅基于自己对请求的处理来执行此操作,即无需咨询PHP资源。这似乎违反了标头的目的,因为大多数请求由于无效的请求参数或权限而失败;并非由于HTTP请求格式错误。因此,即使客户端声明了100个连续的期望并收到100个连续的响应,也并不意味着请求头是有效的。
为了更全面地实现HTTP规范(旨在提高网络效率,安全性和清晰度),我打算在发送100个继续响应之前更正确地验证请求标头。
这意味着在发送100个继续响应之前,必须将请求传递到我的PHP资源控制器以进行验证。这样可以在客户端浪费时间和资源发送大型邮件正文之前,识别出无效的参数和不正确的权限。
我希望交换看起来像这样:
Client Apache Resource
->| | |
|------Request Head------>| |
| |-[Parse] |
|<-----400 bad request----| |
| |-[Route] |
| |-------Request Head-------->|
| | |-[Validate]
| |<---Error / 100 Continue----|
|<--Error / 100 Continue--| |
<-|[End or...] | |
|------Request Body------>| |
| |--------Full …Run Code Online (Sandbox Code Playgroud)