文章目录
  1. 1. 普通报头
    1. 1.1. Cache-Control
    2. 1.2. Date
    3. 1.3. Connection
    4. 1.4. Pragma
  2. 2. 请求报头
  3. 3. 响应报头
  4. 4. 实体报头
  5. 5. 扩展头

TP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。
每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。

普通报头

在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade等

Cache-Control

Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如 下:

  • Public指示响应可被任何缓存区缓存。
  • Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当前用户的部分响应消息,此响应消息对于其他用户的请求无效。
  • no-cache指示请求或响应消息不能缓存
  • no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
  • max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
  • min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
  • max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

Date

Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

Connection

普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项, 通知服务器,在响应完成后,关闭连接。

Pragma

用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。

请求报头

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

常用的请求报头:

  • Accept

    Accept请求报头域用于指定客户端接受哪些类型的信息。 eg:

    Accept:image/gif,表明客户端希望接受GIF图象格式的资源;
    Accept:text/html,表明客户端希望接受html文本。           
    
  • Accept-Charset

    Accept-Charset 请求报头域用于指定客户端接受的字符集 。 eg:

    Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。 
    
  • Accept-Encoding

    Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。eg:

    Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。 
    
  • Accept-Language

    Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。eg:
    
     Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。 
    
  • Authorization

    Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。 
    
  • Host(发送请求时,该报头域是必需的)

    Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTPURL中提取出来的,eg: 
    
    我们在浏览器中输入:http://www.guet.edu.cn/index.html 
    
    浏览器发送的请求消息中,就会包含Host请求报头域,如下: 
    
        Host:www.guet.edu.cn 
    
    此处使用缺省端口号80,若指定了端口号,则变成:Host  www.guet.edu.cn:指定端口号。
    
  • User-Agent

    我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息了。
    
  • Connection

    表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小;

  • Content-Length

    表示请求消息正文的长度

  • Cookie
  • From

    请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它;

  • If-Modified-Since

    只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答;

  • Pragma

    指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝;

  • Referer

    包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

  • UA-Pixels,UA-Color,UA-OS,UA-CPU

    由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。

实例:

GET /form.html HTTP/1.1 (CRLF) 

Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF) 

Accept-Language:zh-cn (CRLF) 

Accept-Encoding:gzip,deflate (CRLF) 

If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF) 

If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF) 

User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF) 

Host:www.guet.edu.cn (CRLF) 

Connection:Keep-Alive (CRLF) 

(CRLF)

响应报头

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

常用的响应报头:

  • Location

    表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302;

  • Server

    Server响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。下面是Server响应报头域的一个例子:

    Server:Apache-Coyote/1.1 
    
  • WWW-Authenticate

    WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。 eg:

    WWW-Authenticate:Basic realm="Basic Auth Test!"  //可以看出服务器对请求资源采用的是基本验证机制。
    
  • Allow

    服务器支持哪些请求方法(如GET、POST等);

  • Content-Encoding

    文档的编码(Encode)方法。

  • Content-Length

    表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容;

  • Content-Type

    表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentTyep。 可在web.xml文件中配置扩展名和MIME类型的对应关系;

  • Refresh

    表示浏览器应该在多少时间之后刷新文档,以秒计。

  • Date

    当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦;

  • Expires

    指明应该在什么时候认为文档已经过期,从而不再缓存它。

  • Last-Modified

    文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置;

实体报头

请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。

常用报头:

  • Allow:GET,POST
  • Content-Encoding:文档的编码(Encode)方法,例如:gzip,见“2.5 响应头”;
  • Content-Language:内容的语言类型,例如:zh-cn;
  • Content-Length:表示内容长度,eg:80,可参考“2.5响应头”;
  • Content-Location:表示客户应当到哪里去提取文档,例如:http://www.dfdf.org/dfdf.html,可参考“2.5响应头”;
  • Content-MD5:MD5 实体的一种MD5摘要,用作校验和。发送方和接受方都计算MD5摘要,接受方将其计算的值与此头标中传递的值进行比较。Eg1:Content-MD5: 。Eg2:dfdfdfdfdfdfdff==;
  • Content-Range:随部分实体一同发送;标明被插入字节的低位与高位字节偏移,也标明此实体的总长度。Eg1:Content-Range: 1001-2000/5000,eg2:bytes 2543-4532/7898
  • Content-Type:标明发送或者接收的实体的MIME类型。Eg:text/html; charset=GB2312 主类型/子类型;
  • Expires:为0证明不缓存;
  • Last-Modified:WEB 服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等。例如:Last-Modified:Tue, 06 May 2008 02:42:43 GMT.

扩展头

在HTTP消息中,也可以使用一些在HTTP1.1正式规范里没有定义的头字段,这些头字段统称为自定义的HTTP头或者扩展头,他们通常被当作是一种实体头处理。

现在流行的浏览器实际上都支持Cookie,Set-Cookie,Refresh和Content-Disposition等几个常用的扩展头字段。

  • Refresh:1;url=http://www.dfdf.org //过1秒跳转到指定位置;
  • Content-Disposition:头字段
  • Content-Type:WEB 服务器告诉浏览器自己响应的对象的类型。

    eg1:Content-Type:application/xml ;
    
    eg2:applicaiton/octet-stream;
    
文章目录
  1. 1. 普通报头
    1. 1.1. Cache-Control
    2. 1.2. Date
    3. 1.3. Connection
    4. 1.4. Pragma
  2. 2. 请求报头
  3. 3. 响应报头
  4. 4. 实体报头
  5. 5. 扩展头