当浏览器请求网页时,它会向Web服务器发送大量信息,这些信息无法直接读取,因为此信息作为HTTP请求标头的一部分传输.您可以查看 HTTP协议以获取更多相关信息.
以下是重要的标题信息它来自浏览器端,你会非常频繁地使用网络编程和减号;
Sr .No. | 标题&描述 |
---|---|
1 | 接受 此标头指定浏览器或其他客户端可以处理的MIME类型. image/png 或 image/jpeg 的值是两种最常见的可能性. |
2 | Accept-Charset 此标头指定浏览器可用于显示信息的字符集.例如ISO-8859-1. |
3 | 接受编码 此标头指定浏览器的编码类型知道如何处理.值 gzip 或压缩是两种最常见的可能性. |
4 | 接受语言 此标头指定客户端的首选语言,以防servlet以多种语言生成结果.例如en,en-us,ru等 |
5 | 授权 客户使用此标头标识自己访问受密码保护的网页时. |
6 | 连接 此标头指示客户端是否可以处理持久性HTTP连接.持久连接允许客户端或其他浏览器使用单个请求检索多个文件.值 Keep-Alive 表示应该使用持久连接. |
7 | 内容长度 此标头仅适用于POST请求,并以字节为单位给出POST数据的大小. |
8 | Cookie 此标头将cookie返回给先前已将其发送到浏览器的服务器. |
9 | 主机 此标头指定原始网址中给出的主机和端口. |
10 | If-Modified-Since 此标题表示客户端仅在指定日期之后更改页面时才想要页面.如果没有更新的结果,服务器发送代码304,这意味着未修改标题. |
11 | If-Unmodified-Since 此标题与If-Modified-Since相反;它指定只有在文档早于指定日期时操作才会成功. |
12 | Referer 此标题表示引用网页的URL.例如,如果您在网页1并单击指向网页2的链接,则当浏览器请求网页2时,网页1的URL将包含在Referrer标题中. |
13 | 用户代理 此标题标识发出请求的浏览器或其他客户端,可用于将不同内容返回给不同类型的浏览器. |
有以下方法可以用于读取servlet程序中的HTTP头.这些方法可用于 HttpServletRequest 对象
Sr.No . | 方法&描述 |
---|---|
1 | Cookie [] getCookies() 返回一个数组,其中包含客户端通过此请求发送的所有Cookie对象. |
2 | Enumeration getAttributeNames() 返回一个Enumeration,其中包含此请求可用的属性名称. |
3 | Enumeration getHeaderNames() 返回此请求包含的所有标题名称的枚举. |
4 | Enumeration getParameterNames() 返回包含此请求中包含的参数名称的String对象的枚举 |
5 | HttpSession getSession() 返回当前关联的会话如果请求没有会话,请创建一个. |
6 | HttpSession getSession(boolean create) 返回当前与此请求关联的HttpSession,或者,如果没有当前会话且create的值为true,则返回新会话. |
7 | Locale getLocale() 返回首选的区域设置客户端将根据Accept-Language标头接受内容. |
8 | Object getAttribute(字符串名称) 返回值作为Object的named属性,如果不存在给定名称的属性,则为null. |
9 | ServletInputStream getInputStream() 检索主体使用ServletInputStream请求二进制数据. |
10 | String getAuthType() 返回名称用于保护servlet的身份验证方案,例如"BASIC"或"SSL",如果JSP未受保护,则为null. |
11 | String getCharacterEncoding() 返回的名称此请求正文中使用的字符编码. |
12 | String getContentType() 返回MIME类型请求的主体,如果类型未知,则返回null. |
13 | String getContextPath() 返回部分请求指示请求上下文的URI. |
14 | String getHeader(String name) 返回值将指定的请求标头作为字符串. |
15 | String getMethod() 返回的名称用于发出此请求的HTTP方法,例如,GET,POST或PUT. |
16 | String getParameter(String name) 返回值请求参数作为String,如果参数不存在,则返回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() 返回此部分请求从协议名称到HTTP请求第一行中的查询字符串的URL. |
24 | String getRequestedSessionId() 返回指定的会话ID由客户. |
25 | String getServletPath() 返回此部分请求调用JSP的URL. |
26 | String [] getParameterValues(String name) 返回包含给定请求参数所具有的所有值的String对象数组,如果参数不存在,则返回null. |
27 | boolean isSecure() 返回一个布尔值,指示是否此请求是使用安全通道进行的,例如HTTPS. |
28 | int getContentLength() 返回长度,in请求体的字节,由输入流提供,如果长度未知,则为-1. |
29 | int getIntHeader(String name) 返回值将指定的请求标头作为int. |
30 | int getServerPort() 返回端口号该请求已收到. |
以下是使用HttpServletRequest的 getHeaderNames()方法读取HTTP头信息的示例.此方法返回一个Enumeration,其中包含与当前HTTP请求关联的头信息.
一旦我们有了枚举,我们就可以用标准方式循环Enumeration,使用 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 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会产生以下结果 :
HTTP Header Request ExampleHeader NameHeader Value(s)accept*/*accept-languageen-ususer-agentMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)accept-encodinggzip, deflatehostlocalhost:8080connectionKeep-Alivecache-controlno-cache