当浏览器请求的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 |