修复 Apache 中的格式错误的请求

修复 Apache 中的格式错误的请求

假设某个浏览器有错误并发送格式错误的请求。我想通过它们的代理类型检测这些浏览器。问题是浏览器无法发送所需的标头。所以我认为诀窍是 1. 通过 http_user_agent 检测坏浏览器和 2. 添加缺失的标头,这应该可以修复请求并允许 Apache 继续正常运行,对吗?所以这是我们的 http_user_agent:Allscripts-HIE-Broker/1.1.0.10,缺失的标头是:

start-info: "text/xml"

以下是浏览器确实发送的标头:

POST /csp/hsbus/HS.IHE.XDSb.Repository.Services.cls HTTP/1.1
Content-Type: multipart/related; type="application/xop+xml";start="<http://tempuri.org/0>"; boundary="79a640a5-d64d-4ed9-882d-f9b652f27cf2+custom";start-info="application/soap+xml"
Host: example.com
Content-Length: 132691
Expect: 100-continue
Accept-Encoding: gzip, deflate
X-Forwarded-For: 1.2.3.4

以下是我开始为配置编写的内容。我不确定这是否需要作为过滤器,或者它是否可以单独替代,或者其他什么:

FilterProvider ALLSCRIPTS_FILTER SUBSTITUTE "%{HTTP_USER_AGENT} =~ m|^Allscripts-HIE-Broker|"

对于替代,我想到的是:

Substitute "s|\r\nContent-Length:|start-info: "text/xml"\r\nContent-Length:|i"

但还是不知道该放在哪里。如能得到任何帮助,我将不胜感激!谢谢!注意:我使用的是 Apache 2.4.6。

我可能已经找到了解决方案,但我必须等待测试。在此之前,这看起来可行吗?

Header %{HTTP_USER_AGENT} =~ "m|^Allscripts-HIE-Broker|" merge start-info expr="text/xml"

答案1

您的Header指令很接近,但并不完全正确。之前的条件参数merge不是表达式,而是可选的单词onsuccessalways。请参阅标头寻求(不太清楚的)解释。

这应该有效:

Header merge start-info text/xml expr="%{HTTP_USER_AGENT} =~ m|^Allscripts-HIE-Broker|"

如果您的 Apache 版本太旧而无法允许该条件,您可以将其包装在<If>

<If "%{HTTP_USER_AGENT} =~ m|^Allscripts-HIE-Broker|">
  Header merge start-info text/xml
</If>

相关内容