相关疑难解决方法(0)

Apache模块:实现100-Continue

用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)

php apache http

5
推荐指数
1
解决办法
608
查看次数

标签 统计

apache ×1

http ×1

php ×1