當瀏覽器請求的Web頁時,它發送特定信息不能被直接讀取,因為此信息的傳輸作為HTTP請求的標頭的一部分到Web服務器。您可以查看HTTP協議的更多信息。
以下是來自於瀏覽器端,你會在網絡編程中使用非常頻繁的重要頭信息:
頭信息 | 描述 |
---|---|
Accept | 這個頭指定瀏覽器或其他客戶端可以處理的MIME類型。image/PNG和image/JPEG是最常見的兩種的可能值。 |
Accept-Charset |
這個頭指定的字符集的瀏覽器可以使用它來顯示信息。例如ISO-8859-1。 |
Accept-Encoding |
這個頭指定的編碼類型,瀏覽器知道如何處理。gzip壓縮或compressare最常見的兩種的可能的值。 |
Accept-Language | 這個頭指定客戶端的首選語言的情況下,servlet可以在一個以上的語言產生的結果。例如,en,EN-US等。 |
Authorization | 這頭用於客戶端識彆自己的身份訪問受密碼保護的網頁。 |
Connection | 此標頭指示客戶端是否可以處理持久HTTP連接。持久連接允許客戶端或其他瀏覽器,在單個請求來檢索多個文件。值保持活動的方式,持續的連接應使用 |
Content-Length | 此頭是隻適用於POST請求,並給出的POST數據的大小(以字節為單位)。 |
Cookie | 這頭返回到服務器以前發送到瀏覽器的cookie。 |
Host | 這個頭指定的主機和端口,在原來的URL。 |
If-Modified-Since | 這頭表示客戶端想要的頁麵,隻有當它在指定的日期後已更改。服務器發送一個代碼,304表示不修改的頭,如果冇有新的結果可以使用。 |
If-Unmodified-Since | 這頭是相反的If-Modified-Since的,它指定的操作應該會成功,如果該文件是早於指定日期。 |
Referer |
此標頭指示的Web頁的URL。例如,如果你在網頁1,點擊一個鏈接到網頁2,Referer標頭中包含的網頁的URL是當瀏覽器請求的網頁2。 |
User-Agent | 此標頭識彆提出請求的瀏覽器或其他客戶端,並可以使用不同類型的瀏覽器返回不同的內容。 |
有以下的方法,它們可以被用來讀取HTTP報頭中的Servlet程序。這些方法可與HttpServletRequest對象。
S.N. | 方法& 描述 |
---|---|
1 |
Cookie[] getCookies() 返回一個數組,包含所有的Cookie對象的客戶端發送此請求。 |
2 |
Enumeration getAttributeNames() 返回一個枚舉,其中包含的屬性,提供給此請求的名稱。 |
3 |
Enumeration getHeaderNames() 返回一個枚舉這個請求包含所有的頭名。 |
4 |
Enumeration getParameterNames() 返回一個枚舉的String對象,包含在該請求中包含的參數的名稱。 |
5 |
HttpSession getSession() 返回與此請求關聯的當前會話,或者如果請求冇有會話,創建一個。 |
6 |
HttpSession getSession(boolean create) 返回與此請求關聯的HttpSession中,如果如果冇有當前會話,並創建是真實的,則返回一個新的會話。. |
7 |
Locale getLocale() 返回的首選區域設置,客戶端將接受的內容,根據Accept-Language頭 |
8 |
Object getAttribute(String name) 返回值的命名屬性的對象,如果冇有給定名稱的屬性存在,則返回null。 |
9 |
ServletInputStream getInputStream() 檢索請求主體的二進製數據,使用一個ServletInputStream。 |
10 |
String getAuthType() 返回的身份驗證方案,用於保護的servlet的名稱,例如,“基本”或“SSL”,則返回null,如果JSP冇有受到保護 |
11 |
String getCharacterEncoding() 返回在體內此請求使用的字符編碼的名稱。 |
12 |
String getContentType() 返回的MIME類型的請求主體,如果不知道類型,則返回null。 |
13 |
String getContextPath() 返回的部分,指示請求的上下文中的請求URI。 |
14 |
String getHeader(String name) 返回值作為一個String指定的請求頭。 |
15 |
String getMethod() 返回這個請求的HTTP方法的名稱,例如,GET,POST或PUT。 |
16 |
String getParameter(String name) 返回值的請求參數為字符串,或者為null,如果該參數不存在。 |
17 |
String getPathInfo() 提出這個要求時,客戶端發送的URL返回任何額外的路徑信息。 |
18 |
String getProtocol() 返回的名稱和版本的協議的請求。 |
19 |
String getQueryString() 返回的查詢字符串中包含請求的URL路徑之後。 |
20 |
String getRemoteAddr() 返回的互聯網協議(IP)地址的客戶端發送請求。 |
21 |
String getRemoteHost() 返回發送請求的客戶端的完全限定名稱。 |
22 |
String getRemoteUser() 提出這個要求返回登錄的用戶,如果用戶已通過身份驗證,或者如果用戶未通過身份驗證,則返回null。 |
23 |
String getRequestURI() 返回此請求的URL的一部分從HTTP請求中的第一行中的查詢字符串的協議名稱。 |
24 |
String getRequestedSessionId() 返回指定的客戶端的會話ID。 |
25 |
String getServletPath() 返回調用JSP的請求的URL的一部分。 |
26 |
String[] getParameterValues(String name) 返回一個數組,包含所有給定的請求參數的值,則返回null,如果該參數不存在的String對象。 |
27 |
boolean isSecure() 返回一個布爾值,指示是否要求使用安全通道,如HTTPS。 |
28 |
int getContentLength() 返回的長度,以字節為單位,請求體,並提供輸入流,或如果長度不知道時為-1。 |
29 |
int getIntHeader(String name) 返回指定的請求頭為一個int值。 |
30 |
int getServerPort() 返回的端口號上接收到這個請求。 |
下麵的例子使用HttpServletRequest的getHeaderNames()方法讀取HTTP頭信息。此方法返回一個枚舉包含與當前的HTTP請求頭信息。
一旦我們有一個枚舉,我們可以循環下來的枚舉以標準方式,使用調用hasMoreElements()方法來確定何時停止,並用nextElement()方法得到每個參數的名稱。
// Import required java libraries import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // Extend HttpServlet class public class DisplayHeader extends HttpServlet { // Method to handle GET method request. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Set response content type - by www.gitbook.net response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "HTTP Header Request Example"; String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n"+ "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<table width=\"100%\" border=\"1\" align=\"center\">\n" + "<tr bgcolor=\"#949494\">\n" + "<th>Header Name</th><th>Header Value(s)</th>\n"+ "</tr>\n"); Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } out.println("</table>\n</body></html>"); } // Method to handle POST method request. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
現在,調用上麵的servlet會產生以下結果:
Header Name | Header Value(s) |
---|---|
accept | */* |
accept-language | en-us |
user-agent | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8) |
accept-encoding | gzip, deflate |
host | localhost:8080 |
connection | Keep-Alive |
cache-control | no-cache |