java - 使用 Servlet API,如何确定请求是 HTTP/1.0 还是 HTTP/1.1?

标签 java http servlets

我正在修复一个错误,该错误仅在客户端使用 HTTP/1.0 时出现(并且是 secret 地,Internet Explorer 在防火墙后面代理)。详情在这里:https://issues.apache.org/jira/browse/TAP5-1880

无论如何,正确的解决方案是在请求为 HTTP/1.0 时关闭一个特性(GZip 内容压缩)。然而,在搜索 Servlet API 文档,甚至 Jetty 源代码后,我找不到任何公开此信息的地方。

那么,有没有办法确定这一点?我正在使用 Servlet API 2.5。

提前致谢!

最佳答案

request.getProtocol() will return "HTTP/1.0" or "HTTP/1.1"

这里是例子,在你本地的tomcat中执行

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class ShowRequestHeaders extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Servlet Example: Showing Request Headers";
    out.println(ServletUtilities.headWithTitle(title) +
                "<BODY BGCOLOR=\"#FDF5E6\">\n" +
                "<H1 ALIGN=CENTER>" + title + "</H1>\n" +
                "<B>Request Method: </B>" +
                request.getMethod() + "<BR>\n" +
                "<B>Request URI: </B>" +
                request.getRequestURI() + "<BR>\n" +
                "<B>Request Protocol: </B>" +
                request.getProtocol() + "<BR><BR>\n" +
                "<TABLE BORDER=1 ALIGN=CENTER>\n" +
                "<TR BGCOLOR=\"#FFAD00\">\n" +
                "<TH>Header Name<TH>Header Value");
    Enumeration headerNames = request.getHeaderNames();
    while(headerNames.hasMoreElements()) {
      String headerName = (String)headerNames.nextElement();
      out.println("<TR><TD>" + headerName);
      out.println("    <TD>" + request.getHeader(headerName));
    }
    out.println("</TABLE>\n</BODY></HTML>");
  }

  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
    doGet(request, response);
  }
}

关于java - 使用 Servlet API,如何确定请求是 HTTP/1.0 还是 HTTP/1.1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9827393/

相关文章:

java - 如何部署基于 Jetty 的 Web 应用程序

java正则表达式不能使用符号?和 {n} 一起

java - 为命令提示符循环切换 vs map

Java 使用 lambda 迭代映射器方法?

http - 我可以安全地从 QR 码中的 URL 中删除 "http://"和 "www"吗?

android - 网址打开连接

c# - 解析 HTTP JSON 响应 - C#

java - 如何在2条camel路由之间传输上下文(在同一个camelContext中)

java - 引用HTML文件中的servlet以获取Tomcat中的.war文件

java - 为什么 JSP(和 JSTL/EL)采用与 Servlet 或 JSF 不同的方式来执行资源注入(inject)?