2

我有一条骆驼路线,它设置了一些自定义标头并充当反向代理。

from("servlet:///listen/path?matchOnUriPrefix=true")
            .setHeader(Exchange.HTTP_RESPONSE_CODE, simple("200"))
            .setHeader("MY_HEADER", simple("MY_VALUE"))
            .to("some endpont");

对应用服务器的请求是通过 Web 代理传递的,并且 Web 代理会为请求设置一些标头。这些标头包含一些敏感信息。但是看起来骆驼溃败将所有请求标头作为响应标头复制到响应中,因此网络代理设置的敏感信息在浏览器端可用。

Browser         Web agent

  +--+                                    Camel Route
  |  |         +----------+               +------------+
  |  +-------> | Sets some|-------------> |            |
  |  |         | headers  |               |            |
  |  | <-------| to request <-------------+            |
  |  |         |          |               |            |
  |  |         +----------+               +------------+
  |  |            
  +--+                                
Response headers
having web-agent
headers

但是,当我跳过骆驼溃败时,响应没有网络代理标头。所以我怀疑camel/servelet组件复制请求头来响应。请注意,我没有复制任何请求标头来响应我在 roue 中的代码。请对此有所了解。

更新

根据骆驼servlet文档

Camel 将应用与 HTTP 组件相同的消息头。Camel 还将填充所有 request.parameter 和 request.headers。例如,如果客户端请求的 URL 为 http://myserver/myserver?orderid=123,则交换将包含一个名为 orderid 的标头,其值为 123。

这是否意味着 servlet 组件将所有请求标头复制到响应中?如果是这样如何禁用它?

4

2 回答 2

1

您想在发送前删除标题吗?为什么不直接使用 . removeHeaders(). 当然,您可以为该语句提供一个模式,以便删除特定的标题。至少通过这种方式,您可以确保这些标头不会传递给响应消息。

于 2016-05-28T15:56:32.000 回答
0

您可以将“copyHeaders = false”添加到您的转发网址

于 2017-06-16T08:08:31.090 回答