【问题标题】:Passing Warning response header in tomcat在 tomcat 中传递警告响应标头
【发布时间】:2016-03-07 13:41:32
【问题描述】:

雄猫 8_32

Windows 7

Java 8_51

RestEasy 3.0.11.Final

GWT 2.7.0 (Jetty jetty-9.3.5.v20151012)

Servlet 代码对另一个 servlet(同一个容器)进行 RestEasy 调用 - 第二个 servlet 在响应时设置“警告”HTTP 标头。想在第一个 servlet 中访问它,但在 Tomcat 中运行时,不包括该标头。

在第一个 servlet 中获取标头的代码:

对象头 = ((ClientResponseFailure) e).getResponse().getResponseHeaders().get("Warning");

还尝试过:getHeaders()、getStringHeaders() 和 getHeaderString()。

当使用 Jetty 在 IntelliJ (15.0.4) 中以 superdev 模式运行 GWT 时,上面会返回一个列表,其中包含一个包含警告字符串的项目。远程调试 Tomcat 时,该调用返回 null。

将此添加到 web 应用程序 xml,并且还尝试了 Tomcat conf/web.xml...

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.exposed.headers</param-name>
        <param-value>Warning</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

也尝试过 cors.allowed.headers。

任何指针?

【问题讨论】:

  • Fiddler [或您选择的代理] 中的响应是什么样的?你看到那里的标题了吗?
  • 好主意 - 但在一切完成之前,我无法让 Fiddler 向我显示响应标头(这都在同一个容器中)。我确实注意到,在设置 Content-Length 和 Warning 之后,响应标头仍然只包含 Set-Cookie 和 X-Frame-Options。当它到达第二个 servlet 时,它具有 Content-Length、Date、Server、Set-Cookie 和 X-Frame-Options。如前所述,在 Jetty 上一切正常(即我得到所有标题)。
  • 知道了...没有意识到它不会“通过网络”。

标签: tomcat tomcat8


【解决方案1】:

好的,Tomcat 和 Jetty 在提交响应时似乎有所不同。如果我按... setStatus、setHeader、getWriter 进行排序,那么两者都适用。

我在设置的警告标头之前有 getWriter,但此时响应已经提交,因此无法添加标头。出于某种原因,Jetty 没问题。

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    相关资源
    最近更新 更多