HTTP 协议头参考

上一篇 / 下一篇  2010-05-16 00:02:46 / 个人分类:HTTP协议

HTTP请求和HTTP响应都使用头发送有关HTTP消息的信息。头由一系列行组成,每行都包含名称,然后依次是冒号、空格、值。字段可按任何顺序排列。某些头字段既能用于请求头也能用于响应头,而另一些头字段只能用于其中之一。

许多请求头字段都允许客户端在值部分指定多个可接受的选项,有时甚至可以对这些选项的首选项进行排名。多个项以逗号分隔。例如,客户端可以发送包含 “Content-Encoding: gzip, compress,”的请求头,表示可以接受各种压缩类型。如果服务器的响应正文使用gzip编码,其响应头中将包含“Content-Encoding: gzip”。

有些字段可以在单个头中出现多次。例如,头可以有多个“Warning”字段。

下表列出了HTTP 1.1头字段。注意:有些头字段是MIME字段。MIME字段在Internet Engineering Task Force (IETF)文档RFC 2045中进行了定义,但也可用于HTTP 1.1协议。有关MIMEHTTP 1.1规范的详细信息,请参阅IEIF页。

一般头字段

一般头字段可用于请求消息和响应消息。

 名称          示例值

Cache-Control "max-age=10"

Connection    "close"

Date          "Tue, 11 Jul 2000 18:23:51 GMT"

Pragma       "no-cache"

Trailer        "Date"

Transfer-Encoding "chunked"

Upgrade      "SHTTP/1.3"

Via           "HTTP/1.1 Proxy1, HTTP/1.1 Proxy2"

Warning       "112 Disconnected Operation"

请求头字段

请求头字段仅用于请求消息。

   名称             示例值

Accept          "text/html, image/*"

Accept-Charset   "iso8859-5"

Accept-Encoding "gzip, compress"

Accept-Language "en, fr"

Authorization    [credentials]

Content-Encoding "gzip"

Expect          "100-continue"

From           "user@microsoft.com"

Host            "www.microsoft.com"

If-Match         "entity_tag001"

If-Modified-Since "Tue, 11 Jul 2000 18:23:51 GMT"

If-None-Match   "entity_tag001"

If-Range        "entity_tag001" or "Tue, 11 Jul 2000 18:23:51 GMT"

If-Unmodified-Since "Tue, 11 Jul 2000 18:23:51 GMT"

Max-Forwards    "3"

Proxy-Authorization [credentials]

Range      "bytes=100-599"

Referer     "http://www.microsoft.com/resources.asp"

TE          "trailers"

User-Agent  "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"

 

>>请求头字段的具体含义

Accept:浏览器可接受的MIME类型。

Accept-Charset:浏览器可接受的字符集。

Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip

Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。

Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。

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

Content-Length:表示请求消息正文的长度。

Cookie:设置cookie,这是最重要的请求头信息之一

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

Host:初始URL中的主机和端口。

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

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

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

User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。

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

响应头字段

响应头字段仅用于响应消息。

  名称          示例值

Accept-Ranges  "none"

Age            "2147483648(2^31)"

ETag           "b38b9-17dd-367c5dcd"

Last-Modified   "Tue, 11 Jul 2000 18:23:51 GMT"

Location        "http://localhost/redirecttarget.asp"

Proxy-Authenticate [challenge]

Retry-After     "Tue, 11 Jul 2000 18:23:51 GMT" or "60"

Server         "Microsoft-IIS/5.0"

Vary           "Date"

WWW-Authenticate [challenge]

实体头字段

实体头字段可以用于请求消息或响应消息。实体头字段中包含消息实体正文的有关信息,如使用的编码格式。

   名称            示例值

Allow              "GET, HEAD"

Content-Encoding  "gzip"

Content-Language  "en"

Content-Length    "8445"

Content-Location   "http://localhost/page.asp"

Content-MD5      [md5-digest]

Content-Range    "bytes 2543-4532/7898"

Content-Type      "text/html"

Expires           "Tue, 11 Jul 2000 18:23:51 GMT"

Last-Modified     "Tue, 11 Jul 2000 18:23:51 GMT"

>>实体头字段的具体含义

Allow服务器支持哪些请求方法(如GETPOST等)。

Content-Encoding文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。JavaGZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的NetscapeWindows上的IE 4IE 5才支持它。

Content-Length表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。

Content-Type表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html

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

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

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

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

Refresh表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。

注意这种功能通常是通过设置HTML页面HEAD区的<META. HTTP-EQUIV="Refresh" C>实现,这是因为,自动刷新或重定向对于那些不能使用CGIServletHTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。

注意Refresh的意义是“N秒之后刷新本页面或访问指定页面”,而不是“每隔N秒刷新本页面或访问指定页面 ”。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META. HTTP-EQUIV="Refresh" ...>。

注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但NetscapeIE都支持它。

请求头示例

以下是HTTP请求的简单示例。

GET /articles/news/today.asp HTTP/1.1

Accept: */*

Accept-Language: en-us

Connection: Keep-Alive

Host: localhost

Referer: http://localhost/links.asp

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Accept-Encoding: gzip, deflate

该请求具有请求行,其中包括方法(GET)、资源路径(/articles/news/today.asp)HTTP版本(HTTP/1.1)。由于该请求没有正文,故所有请求行后面的内容都是头的一部分。紧接着头之后是一个空行,表示头已结束。

响应头示例

Web服务器可以通过多种方式响应前一个请求。假设文件是可以访问的,并且用户具有查看该文件的权限,则响应类似于:

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0

Date: Thu, 13 Jul 2000 05:46:53 GMT

Content-Length: 2291

Content-Type: text/html

Set-Cookie: ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ; path=/

Cache-control: private

...

响应的第一行称为状态行。它包含响应所用的HTTP版本、状态编码(200)和原因短语。示例中包含一个头,其中具有五个字段,接着是一个空行(回车和换行符),然后是响应正文的头两行。

有关HTTP头完整、详细的说明,请参见http://www.w3.org/Protocols/HTTP规范。

 

附录:HTTP协议状态码的含义

  状态代码 状态信息 含义

100 Continue初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)

101 Switching Protocols服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1

200 OK一切正常,对GETPOST请求的应答文档跟在后面。

201 Created服务器已经创建了文档,Location头给出了它的URL

202 Accepted已经接受请求,但处理尚未完成。

203 Non-Authoritative Information文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。

204 No Content没有新文档,浏览器应该继续显示原来的文档。

205 Reset Content没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。

206 Partial Content客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。

300 Multiple Choices客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。

301 Moved Permanently客户请求的文档在其他地方,新的URLLocation头中给出,浏览器应该自动地访问新的URL

302 Found类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”,出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求http://host/~user(缺少了后面的斜杠),有的服务器返回301,有的则返回302。严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307

303 See Other类似于301/302,不同之处在于,如果原来的请求是POSTLocation头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。

304 Not Modified客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

305 Use Proxy客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。

307 Temporary Redirect302Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GETPOST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。(HTTP 1.1新)

400 Bad Request请求出现语法错误。

401 Unauthorized客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。

403 Forbidden资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。

404 Not Found无法找到指定位置的资源。这也是一个常用的应答,

405 Method Not Allowed请求方法(GETPOSTHEADDELETEPUTTRACE等)对指定的资源不适用。(HTTP 1.1新)

406 Not Acceptable指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容(HTTP 1.1新)。

407 Proxy Authentication Required类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)

408 Request Timeout在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)

409 Conflict通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)

410 Gone所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新)

411 Length Required服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)

412 Precondition Failed请求头中指定的一些前提条件失败(HTTP 1.1新)。

413 Request Entity Too Large目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。

414 Request URI Too Long URI太长(HTTP 1.1新)。

416 Requested Range Not Satisfiable服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)

500 Internal Server Error服务器遇到了意料不到的情况,不能完成客户的请求。

501 Not Implemented服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。

502 Bad Gateway服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。

503 Service Unavailable服务器由于维护或者负载过重未能应答。

504 Gateway Timeout由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)

505 HTTP Version Not Supported服务器不支持请求中所指明的HTTP版本


TAG:

 

评分:0

我来说两句

Open Toolbar