【问题标题】:Removing duplicate headers from HTTP requests从 HTTP 请求中删除重复的标头
【发布时间】:2015-01-20 07:54:27
【问题描述】:

我正在使用带有 mod_proxy 的 Apache 2.4 服务器作为 Tomcat 服务器的 HTTP 反向代理。反向代理适用于拆分 DNS 配置,其中“server.com”可能指向实际的 HTTP 服务器或我的反向代理,具体取决于客户端所在的位置。

我遇到的问题是我们的客户端应用程序有一个问题,有时它会多次包含标头。例如,HTTP 请求最终可能如下所示:

POST server.com HTTP/1.1
Some-Header: foo
Authorization: BASIC abc123
Authorization: BASIC abc123
Other-Headers: ...

如果客户端直接与 Tomcat 对话,这可以正常工作,但如果它通过反向代理,那么重复的标头似乎会被破坏,并且 Tomcat 最终会收到如下所示的请求:

POST server.com HTTP/1.1
Some-Header: foo
Authorization: BASIC abc123, BASIC abc123
Other-Headers: ...

我使用 Wireshark 来检查 HTTP 请求,因为它们在 Client->Proxy->Tomcat 链中发送/接收,而 Apache 绝对是将两个标头“折叠”为一个的组件。

有没有一种方法可以配置此行为,即发送两个标头或仅发送一个标头?我不希望发生这种“崩溃”......

【问题讨论】:

  • 您可能可以使用 mod_headers 删除第二个标题...您检查过他们的文档吗?

标签: apache mod-rewrite reverse-proxy mod-proxy mod-headers


【解决方案1】:

您可以使用 mod_headers 删除重复的标题。有关如何启用它的信息,请参阅他们的 official docs。

然后你可以在你的配置文件中添加这样一行,这样标题的第一部分就消失了:

RequestHeader edit Authorization "^BASIC\ abc123\\,\ " ""

让我知道这是否适合你。

【讨论】:

  • 我启用了 mod_headers 并将该行添加到虚拟主机配置文件中,但我不知道应该使用什么来代替“abc123”。此外,如果客户端只发送一个而不是两个标头,这不会中断吗?
  • 想通了。该行是RequestHeader edit Authorization "^BASIC\ [a-zA-Z0-9]+\\,\ " "",因为它是Base64 编码的。它也适用于格式良好的请求。谢谢!
猜你喜欢
  • 2016-12-12
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 2012-01-19
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多