gpt4 book ai didi

java - 写出 Tomcat 响应头

转载 作者:行者123 更新时间:2023-11-28 22:16:12 28 4
gpt4 key购买 nike

上下文 我正在运行一个 Tomcat 8.5 服务器,前端有一个 Nginx 反向代理来终止 SSL 连接,启用更多压缩。

在 Tomcat 服务器上,我有一个正在运行的 Web 应用程序,其中包含一个 servlet、欢迎文件和两个过滤器。 Web 应用程序的目的是将请求和响应 header 的名称和值写入欢迎文件(.jsp 页面)和 catalina.out。

根据请求,一切都按预期工作。

响应中,如果在之前的响应中尚未设置,则不会为包含 JSESSIONID 的 Set-Cookie 写入任何内容。

当我进入 Firefox Web 开发工具并查看响应时,我看到标题如下

  • 连接:保持 Activity 状态
  • 内容类型:text/html;charset=UTF-8

所以我的问题是,除了 JSESSIONID 之外,Tomcat 是否没有设置任何响应 header ?还是根本不可能写出“默认”响应 header 及其值,因为这些 header 始终存在被认为是不言自明的?

注意。当 JSESSIONID 已经设置并且我调用 httpResponse.getHeaderNames().size() 它返回 0(零)

WriteResponseHeaders.java

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
ServletContext sc = filterConfig.getServletContext();

// Run when receiving the request from the client

// Response cookie and headers changes are done here

chain.doFilter(httpRequest, httpResponse);

// Run when sending the response to the client
String newline = System.getProperty("line.separator");
String spaces = "==========================";
String projectname = sc.getInitParameter("projectName");

StringBuilder sb = new StringBuilder();
sb.append(spaces + "start" + spaces + newline);
sb.append(spaces + "Project name: " + projectname + spaces + newline);
sb.append(spaces + "Filter name: " + filterConfig.getInitParameter("name") + spaces + newline);

Collection<String> responseHeaders = httpResponse.getHeaderNames();
for(String headerName : responseHeaders) {
sb.append("header name: " + headerName + newline
+ "header value: " + httpResponse.getHeader(headerName) + newline + newline);
}

sb.setLength(sb.length()-1);//remove the extra newline at the end of the last iteration.
sb.append(spaces + " End " + spaces + newline);
sb.append(spaces + projectname + spaces);

System.out.println(sb.toString());//Print to catalina.out
}

最佳答案

So my question is, does Tomcat not set any response headers besides the JSESSIONID?

它当然会设置所有其他 header ,否则就无法工作。

Or is it simply not possible to write out the "default" response-headers

您可以将它们写在日志中。为此,启用 Access Log Valve .例如,要记录您提到的内容类型:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="custom-localhost_access_log." suffix=".txt" pattern="%a &quot;%r&quot; %s %b %{Content-Type}o" />

此方法的问题是您必须知道所有要记录的 header 名称,并相应地配置您的 Valve。我不知道有什么捷径。可以通过检查 RFC2616 获得完整的 header 列表。 .

关于java - 写出 Tomcat 响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49588761/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com