Используя Servlet API, как определить, был ли запрос HTTP / 1.0 или HTTP / 1.1? - PullRequest
4 голосов
/ 22 марта 2012

Я исправляю ошибку, о которой свидетельствует только то, что клиент использует HTTP / 1.0 (и тайно, Internet Explorer прокси за брандмауэром). Подробности здесь: https://issues.apache.org/jira/browse/TAP5-1880

В любом случае правильное решение - отключить функцию (сжатие содержимого GZip), когда запрос HTTP / 1.0. Однако, после изучения документации API Servlet и даже источника Jetty, я не могу найти места, где раскрывается эта информация.

Итак, есть ли способ определить это? Я использую Servlet API 2.5.

Заранее спасибо!

1 Ответ

8 голосов
/ 22 марта 2012
request.getProtocol() will return "HTTP/1.0" or "HTTP/1.1"

Вот пример, выполните в вашем локальном коте

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);
  }
}
...