來源:LoveJSP.site
Request Header簡介
當一個客戶端(通常是浏覽器)向Web服務器發送一個請求是,它要發送一個請求的命令行,一般是GET或POST命令,當發送POST命令時,它還必須向服務器發送一個叫“Content-Length”的請求頭(Request Header) 用以指明請求數據的長度,除了Content-Length之外,它還可以向服務器發送其它一些Headers,如:
Accept 浏覽器可接受的MIME類型
Accept-Charset 浏覽器支持的字符編碼
Accept-Encoding 浏覽器知道如何解碼的數據編碼類型(如 gzip)。Servlets 可以預先檢查浏覽器是否支持gzip並可以對支持gzip的浏覽器返回gzipped的HTML頁面,並設置Content-Encoding回應頭(response header)來指出發送的內容是已經gzipped的。在大多數情況下,這樣做可以加快網頁下載的速度。
Accept-Language 浏覽器指定的語言,當Server支持多語種時起作用。
Authorization 認證信息,一般是對服務器發出的WWW-Authenticate頭的回應。
Connection 是否使用持續連接。如果servlet發現這個字段的值是Keep-Alive,或者由發出請求的命令行發現浏覽器支持 HTTP 1.1 (持續連接是它的默認選項),使用持續連接可以使保護很多小文件的頁面的下載時間減少。
Content-Length (使用POST方法提交時,傳遞數據的字節數)
Cookie (很重要的一個Header,用來進行和Cookie有關的操作,詳細的信息將在後面的教程中介紹)
Host (主機和端口)
If-Modified-Since (只返回比指定日期新的文檔,如果沒有,將會反回304 "Not Modified")
Referer (URL)
User-Agent (客戶端的類型,一般用來區分不同的浏覽器)
如果你想更多的了解Request Header的內容,你可以訪問W3C的網站。
在Servlet中讀取Request Header的內容
在Servlet中讀取Request Header的值是很簡單的,只要調用HttpServletRequest的getHeader方法就可以了,當你指定要返回的Header的名稱,該方法就會返回String類型的Header的內容,如果指定的Header不存在,就返回null。調用getHeaderNames可以返回包含所有Header名字的Enumeration.
讀取所有Request Header值的Servlet程序
下面是Tomcat中所帶的Servlet例子中關於Request Header的例子,下載該程序。
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestHeaderExample extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Enumeration e = request.getHeaderNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = request.getHeader(name);
out.println(name + " = " + value);
}
}
}