6 响应头域
响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。
6.1 Location响应头域
Location响应头用于重定向接收者到一个新URI地址。
6.2 Server响应头域
Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。
7 实体内容
指在头域结束空行后的所有内容,请求消息和响应消息都可以包含实体信息,实体可以是一个经过编码的字节流,它的编码方式由实体头域中的Content-Encoding或Content-Type定 义,它的长度由Content-Length或Content-Range定义。
8 实体头域
实体头域描述实体的信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header,允许客户端定义新的实体头,但是这些域可能无法被接受方识别。
8.1 Content-Type实体头
Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型 Content-Range实体头
8.2 Content-Range
指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
Content-Range:bytes-unit<空格>first-byte-pos-last-byte-pos/entity-legth
例如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,
8.3 Content-Length
表示实际传送的字节数。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过 byteArrayStream.writeTo(response.getOutputStream()发送内容。
8.4 Allow
服务器支持哪些请求方法(如GET、POST等)。
8.5 Content-Encoding
文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显着地减少HTML文档的 下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept- Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。
8.6 Expires
一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。应该在什么时候认为文档已经过期,从而不再缓存它。
9 响应消息示例:
HTTP/1.0 200 OK
Date:Mon,31Dec200104:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Tue,17Apr200106:46:28GMT
Content-length:4359
Content-range:bytes554554-40279979/40279980
响应消息体…
上例第一行表示HTTP服务端响应一个GET方法。绿色的部分表示响应头域的信息,兰色的部分表示通用头部分,红色的部分表示实体头域的信息。