我可以在 Apache 处理之前修改 HTTP 请求行(服务器端)吗?

我可以在 Apache 处理之前修改 HTTP 请求行(服务器端)吗?

在使用 Apache 2.2.15 的 Centos (版本 6) 上,是否有办法在 Apache 处理之前修改服务器端的初始请求行?我希望能够接受以下请求:

POST /somedirectory/somescript.php\tHTTP/1.1

并将其改为:

POST /somedirectory/somescript.php HTTP/1.1

具体来说,第一个例子中的“\t”字符是制表符,并且 Apache 似乎将其视为无效请求而拒绝并返回状态代码 400。

我想使用任何扩展(例如 mod_rewrite)都不会起作用,因为 Apache 在转发请求之前会拒绝该请求。

答案1

RFC 7230 第 3.1.1 节(“请求行”)规定如下:

请求行以方法标记开始,后跟一个空格(SP)、请求目标、另一个空格(SP)、协议版本,最后以 CRLF 结束。

这意味着您看到的带有‘\t’制表符的请求不是有效的 HTTP 请求,因此 Apache HTTPd 会以“400 错误请求”进行响应。

如果真的需要的话,您也许可以让它工作,但是您将需要在 Apache HTTPd 前面使用某种自定义的代理来重写请求行。

相关内容