【问题标题】:Modifiable request headers with com.sun.net.httpserver.httpserver带有 com.sun.net.httpserver.httpserver 的可修改请求标头
【发布时间】:2020-08-23 17:06:58
【问题描述】:

我正在创建一个简单而轻量级的反向 HTTP 代理,并使用 com.sun.net.httpserver.httpserver

一旦代理完成其工作,它应该在请求标头中添加一些标头并将请求转发到实际服务,但是当我在请求标头中添加任何内容时,我会收到 UnsupportedOperationException,因为它使用的是UnmodifiableHeaders

谁能告诉我如何配置 com.sun.net.httpserver.httpserver 以使用可修改的标头?

或者有没有其他更好但超轻量级的 HTTP 服务器支持这个?

java.lang.UnsupportedOperationException: unsupported operation
    at jdk.httpserver/sun.net.httpserver.UnmodifiableHeaders.add(UnmodifiableHeaders.java:65)
    at com.example.SampleFilter.lambda$addValuesInRequestHeader$1(SampleFilter.java:80)

【问题讨论】:

  • 您不应将此软件包用于此目的。您不能使用 HTTP 服务器编写 HTTP 代理,至少不能正常执行。您需要在 TCP 级别编写并自己实现 HTTP 的必要部分。
  • @MarquisofLorne 所以目前我正在构建一个 MVP 并且不太关心性能。我设计它的方式是自定义过滤器位于单独的模块中,并且可以在任何其他项目中重复使用,因此用其他东西替换这个包对我来说将来不会有太大问题。除了性能之外,您还有什么其他原因建议我在 TCP 级别实现它?

标签: java http servlets server


【解决方案1】:

无法添加/编辑标题,但我们可以使用 httpExchange.setAttribute() 和 httpExchange.getAttribute() 方法在过滤器之间跳转时传递附加信息。

为了向我们想要转发给服务的请求添加标头,我们从原始请求创建一个新的 http 请求并在标头中包含属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2015-01-18
    • 2016-03-18
    • 2015-09-11
    • 2017-07-21
    • 2014-06-24
    • 1970-01-01
    相关资源
    最近更新 更多