![我可以在 Apache 处理之前修改 HTTP 请求行(服务器端)吗?](https://linux22.com/image/737421/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%20Apache%20%E5%A4%84%E7%90%86%E4%B9%8B%E5%89%8D%E4%BF%AE%E6%94%B9%20HTTP%20%E8%AF%B7%E6%B1%82%E8%A1%8C%EF%BC%88%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%EF%BC%89%E5%90%97%EF%BC%9F.png)
在使用 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 前面使用某种自定义的代理来重写请求行。