243.10. 实现反向代理
Netty4 组件可以充当反向代理。这意味着,这些标头是从 HTTP 请求的请求行中接收的绝对 URL 填充:
-
Exchange.HTTP_SCHEME -
Exchange.HTTP_HOST -
Exchange.HTTP_PORT
HTTP Header interference
HTTP 标头可能会干扰客户端或下游处理。
例如,如果更改了 HTTP 正文,则需要重新计算或删除 内容长度 标头(强制块编码)来反映更改。
在以下示例中,HTTP 代理将响应从原始服务器转换为大写:
示例
from("netty-http:proxy://0.0.0.0:8080")
.toD("netty-http:"
+ "${headers." + Exchange.HTTP_SCHEME + "}://"
+ "${headers." + Exchange.HTTP_HOST + "}:"
+ "${headers." + Exchange.HTTP_PORT + "}")
.process(this::processResponse);
void processResponse(final Exchange exchange) {
final NettyHttpMessage message = exchange.getIn(NettyHttpMessage.class);
final FullHttpResponse response = message.getHttpResponse();
final ByteBuf buf = response.content();
final String string = buf.toString(StandardCharsets.UTF_8);
buf.resetWriterIndex();
ByteBufUtil.writeUtf8(buf, string.toUpperCase(Locale.US));
}