2012-03-22 3 views
4

私は、クライアントがHTTP/1.0を使用している(そしてひそかには、Internet Explorerがファイアウォールの背後でプロキシをしている)ときにのみ証明されるバグを修正しています。詳細は次のとおりです。https://issues.apache.org/jira/browse/TAP5-1880サーブレットAPIを使用して、リクエストがHTTP/1.0またはHTTP/1.1であるかどうかを判断する方法は?

いずれの場合でも、リクエストがHTTP/1.0の場合、適切な解決策は機能(GZipコンテンツ圧縮)をオフにすることです。しかし、サーブレットAPIのドキュメントやJettyのソースまで精査した結果、この情報が公開されている場所は見つかりませんでした。

これを判断する方法はありますか?私はサーブレットAPI 2.5を使用しています。

ありがとうございます!ここで

答えて

8
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); 
    } 
} 
+0

を実行し、一例です。ありがとう! –

関連する問題