`

读取HTTP请求头

    博客分类:
  • Java
阅读更多

HTTP请求头概述

   HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,客户程序还可以选择发送其他的请求 头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说Content-Length必须出现。

   下面是一些最常见的请求头:

Accept:浏览器可接受的MIME类型。
Accept-Charset:浏览器可接受的字符集。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
Connection: 表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一 点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
Content-Length:表示请求消息正文的长度。
Cookie:这是最重要的请求头信息之一,参见后面《Cookie处理》一章中的讨论。
From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
Host:初始URL中的主机和端口。
If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
   有关HTTP头完整、详细的说明,请参见http://www.w3.org/Protocols/的HTTP规范。

   5.2 在Servlet中读取请求头

   在Servlet中读取HTTP头是非常方便的,只需要调用一下HttpServletRequest的getHeader方法即可。如果客户请求中提供 了指定的头信息,getHeader返回对应的字符串;否则,返回null。部分头信息经常要用到,它们有专用的访问方法:getCookies方法返回 Cookie头的内容,经解析后存放在Cookie对象的数组中,请参见后面有关Cookie章节的讨论;getAuthType和 getRemoteUser方法分别读取Authorization头中的一部分内容;getDateHeader和getIntHeader方法读取指 定的头,然后返回日期值或整数值。

   除了读取指定的头之外,利用getHeaderNames还可以得到请求中所有头名字的一个Enumeration对象。

   最后,除了查看请求头信息之外,我们还可以从请求主命令行获得一些信息。getMethod方法返回请求方法,请求方法通常是GET或者POST,但也有 可能是HEAD、PUT或者DELETE。getRequestURI方法返回URI(URI是URL的从主机和端口之后到表单数据之前的那一部分)。 getRequestProtocol返回请求命令的第三部分,一般是“HTTP/1.0”或者“HTTP/1.1”。

   5.3 实例:输出所有的请求头

   下面的Servlet实例把所有接收到的请求头和它的值以表格的形式输出。另外,该Servlet还会输出主请求命令的三个部分:请求方法,URI,协议/版本。

   ShowRequestHeaders.java

package hall;

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 = "显示所有请求头";
    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);
  }
}
 

http://www.host01.com/article/jsp/00040003/0542422195127690.htm

 

分享到:
评论

相关推荐

    详解nginx请求头数据读取流程

    在深入探讨Nginx请求头数据读取流程之前,首先理解HTTP请求报文的基本结构至关重要。一个典型的HTTP请求报文由三部分组成:请求行、请求头和请求体。请求行包含了请求方法(如GET、POST等)、请求URI和HTTP协议版本...

    五、读取HTTP请求头

    5.1 HTTP请求头概述 HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外...

    java读取http请求中的body实例代码

    3. **读取HTTP请求头** 要获取HTTP请求头中的信息,可以使用`HttpServletRequest`接口提供的`getHeader(String name)`方法,如`request.getHeader("Content-Type")`,这将返回指定头部字段的值。 4. **读取HTTP...

    JAVA读取HTTP请求

    JAVA读取HTTP请求

    HTTP请求头概述(HttpServletRequest)

    ### HTTP请求头概述 在HTTP协议中,客户端(如浏览器)与服务器之间的通信是通过请求和响应来实现的。客户端发起请求时,除了指定请求类型(通常为GET或POST)外,还可以附加一系列请求头(Request Headers)来提供...

    java实现的代理服务器

    3. **读取客户端请求**:使用`Socket`对象的`getInputStream()`方法获取客户端请求的输入流,然后读取HTTP请求头和请求体。 4. **解析HTTP请求**:解析接收到的HTTP请求,提取目标URL、HTTP方法(GET、POST等)、...

    JAVA获取HTTP请求头的方法示例

    JAVA获取HTTP请求头的方法示例 在 Java 网络编程中,获取 HTTP 请求头是非常重要的一步骤。HTTP 请求头是指在 HTTP 请求中发送的附加信息,它提供了关于请求的更多信息,如请求的方法、协议版本、客户端信息等。...

    boost之http请求及chunked解析

    在HTTP协议中,请求由多个部分组成:请求行、请求头和可选的请求体。Boost.ASIO提供了一个名为`boost::asio::ip::tcp::socket`的类,你可以用它来创建一个TCP连接,从而发送HTTP请求。例如,你可以创建一个socket...

    C语言实现的HTTP请求

    ### C语言实现的HTTP请求知识点解析 #### 一、HTTP请求概述 在互联网通信中,HTTP(HyperText Transfer Protocol)是最常用的协议之一,用于客户端与服务器之间的数据交换。本示例代码展示了如何使用C语言来实现一...

    jsp的一些初级总结

    JSP中的HttpServletRequest对象提供了读取HTTP请求头的方法,如`getHeader()`和`getHeaders()`。这允许开发者获取浏览器发送的信息,如用户代理(User-Agent)、 Accept-Language 等,从而实现定制化的响应。 **五...

    Java代理服务器的实现

    3. **请求解析**:当客户端连接建立后,代理服务器需要读取HTTP请求头和数据,这通常涉及到对 `java.net.Socket` 的使用,以及对输入流(`InputStream`)的读取。 4. **请求转发**:解析出的HTTP请求将被转发到目标...

    C#获取目标网址http头信息,比如状态码等等信息

    在C#编程中,我们需要经常处理HTTP请求,获取目标网址的HTTP头信息,例如状态码、响应时间、服务器类型等,这些信息对于分析网页状态、诊断网络问题以及构建Web应用程序非常有用。本文将深入探讨如何在C#中获取这些...

    从http请求中读取图片,写到本地的方法

    在IT行业中,网络编程是必不可少的一部分,而从HTTP请求中读取图片并将其保存到本地是一种常见的操作。这个过程涉及到网络请求、数据处理以及文件I/O等关键知识点。以下将详细解析这一过程。 首先,我们需要了解...

    QT实现HTTP请求回应程序

    此外,如果需要发送POST请求,可以使用`QNetworkRequest`的`setHeader()`方法设置请求头,然后通过`QNetworkAccessManager::post()`方法发送。POST请求通常用于提交表单数据或其他实体主体。 总结来说,QT通过其...

    J2EEWEB开发教材

    - **4.3.2 实例:在 Servlet 中读取请求头**:演示如何读取 HTTP 请求头。 - **4.3.3 实例:输出所有的请求头**:展示如何输出所有请求头信息。 **4.4 访问 CGI 变量** - **4.4.1 CGI 概述**:通用网关接口的历史...

    C/C++ http请求

    - HTTP请求由请求行(包含方法、URL和协议版本)、请求头和可选的请求体组成。 - 常见的HTTP方法有GET、POST、PUT、DELETE等。 - 请求头用于提供附加信息,如用户代理、内容类型、授权等。 3. **套接字编程**: ...

Global site tag (gtag.js) - Google Analytics