如何根据来源的标头更改 HTTP 状态?

如何根据来源的标头更改 HTTP 状态?

我正在处理一个专有的 HTTP 服务器,它总是响应代码 200 — 即使发生错误。错误指示(如果有)只能在自定义标头中找到,例如:(MyApp-Status: SECURITY_EXCEPTION在成功的请求中,标头包含OK)。

我正在将基于 Apache 的代理放在它前面,并想修复这个无意义的问题。

我如何根据来源的标头将响应的状态从来源指定的(虚假的) 200 更改为更合适的值MyApp-Status

我知道,mod_headers 会修改响应的标头——它可以修改地位也一样?

并且 mod_rewrite 可以设置状态——但它可以应用于回复

答案1

mod_headers 会在将完整响应发送回客户端之前进行“后期”处理。在反向代理场景中,应允许它根据后端服务器发送的标头进行更改和设置标头。

手册中的示例中的示例场景 #4https://httpd.apache.org/docs/2.4/mod/mod_headers.html似乎适合您的用例。

从理论上讲,这样的事情应该可行:

<LocationMatch "/myapp">
    ProxyPass http://hostname:8080/myapp 
    ProxyPassReverse http://hostname:8080/myapp
    SetEnvIf MyApp-Status SECURITY_EXCEPTION HAVE_MyRequestHeader
    Header set Status "403" env=HAVE_MyRequestHeader
</LocationMatch>

但请测试并报告。

相关内容