2012-03-22 132 views
4

我正在修復一個僅在客戶端使用HTTP/1.0(並且祕密地​​說,Internet Explorer代理位於防火牆後面)時出現的錯誤。詳細信息如下:https://issues.apache.org/jira/browse/TAP5-1880使用Servlet API,如何確定請求是HTTP/1.0還是HTTP/1.1?

無論如何,正確的解決方案是在請求爲HTTP/1.0時關閉功能(GZip內容壓縮)。但是,在瀏覽Servlet API文檔,甚至是Jetty源代碼後,我找不到任何公開這些信息的地方。

那麼,有沒有辦法確定這一點?我正在使用Servlet 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

回想起來那麼明顯;謝謝! – 2012-05-10 00:30:05

相關問題