http header详解

HTTP 协议被设计得非常强大,但很多网络应用都没有利用这些强大之处。比如缓存和HTTP 方法。HTTP为资源的增删改查分别提供了PUT, DELETE, POST, GET等方法,确没有人用。所以,最近兴起的Restful只是对优化web架构、充分利用HTTP协议的能力的一个回归。下面是一些HTTP协议的概述:

消息:

HTTP协议中顶级数据单位,使用HTTP协议通信的机器之间来回发送的数据包。

实体:

只出现在有消息体的消息中。它按照实体header定义的格式和编码进行传输。

方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
OPTIONS: 客户端查询服务器对与某URL 允许的通信选项

GET: 从服务器获取URL 对应的资源

HEAD : 除了服务器响应中不能包含消息体,该方法与GET 一样。用于只需少数元信息的情况

POST: 被设计用来注解、修改URL 所对应的资源

PUT: 被设计用来修改或创建资源。当URL 对应的资源存在时,则提交的作为新版本,否则新建资源

DELETE: 被设计用来删除URL 对应的资源

TRACE: 主要用来测试。服务器将最终接收到的请求本身发送回来,作为客户端诊断依据

CONNECT:保留的方法名,用于代理切换隧道

http header 特殊参数:

q:

在大多的各种header值中,都可以看到一个名为q=0.2、q=0.7 之类的参数。因为发送header主要是一个和服务器的协商过程,所以能允许 的选项一般不只一个,但具体哪个优先呢?这就需要为一些选项制定权重值。q参数的值是一个从0 到1的浮点数,默认是1,为0 表示客户端无法接收,小数点后不能超过3 位。另外,header的多个值之间用逗号分隔而不是分号。比如这个header:Accept:audio/;q=0.2,audio /basic,这表示客户端告诉服务器“我最喜欢的是一个audio/basic 类型的音频(因为它没有设置q 参数,默认是1),但如果没有,给我一个任意类型(audio/)的音频也行”。当然,这只是q参数一个比较简单的应用。

常规header :

header 意义
Cache-Control 用于指出请求/响应链上所有缓存必须服从的指令,它必须具有穿透各代理和网关的能力。HTTP1.0 可能不支持该header 和Pragma:no-cache。
Connection 允许客户端指出希望特定连接的选项,且禁止由代理在将来的连接中通讯。
Date 表示消息发生的日期和时间,与RFC 822 中的orig-date 语义一致。
Pragma 用来包括实现特定的指令,可能应用到请求/响应链上所有接收方。
Trailer 指出给出的头部域集合在以chunked transfer-coding 编码的消息的尾部中存在。
Transfer-Encoding 指出应用什么类型的转换到消息主体上,与content-coding 不同,这不是指定实体的属性而是消息的 。
Upgrade 允许客户端指出其支持的其他通讯协议,切愿意使用之,若服务器发现切换是可行的,必须在响应中回101。
Via 必须由网关或代理来指出请求中的UA和服务器、以及在响应中的原始服务器和客户端的中间协议和接收方。用于跟踪消息转发,避免请求循环。
Warning 用户携带关于消息的状态和转换的额外信息,可能不在消息中反映。一般用于警告应用到消息实体上的缓存操作或转换缺少语义透明度。
Accept 客户端指出响应可以接受的媒体类型。
Accept-Charset 客户端指出响应可以接受的字符集。
Accept-Encoding 客户端指出响应可以接受的字符编码。
Accept-Language 客户端指出允许的语言。
Authorization 客户端在受到401 后,需要向服务器标明身份,包括此header 即可。
Expect 客户端指出要求的特殊服务器行为。若服务器无法满足,可以返回417。
Host 客户端指出要请求的资源的因特网主机和端口号。
If-Match 用于与方法一起使其条件化。
If-Modified-Since 用于方法使其条件化,如果请求的变量在本域指定的时间从来不曾修改过,则实体将不会从服务器返回,改为304。
If-None-Match 用于与方法一起使其条件化。
If-Range 用于与方法一起使其条件化。
If-Unmodified-Since 用于与方法一起使其条件化,如果请求的资源自header 值时间以来未改变,则服务器执行该请求。
Max-Forwards 提供某种机制,TRACE 和OPTIONS 方法用来限制可以转发给下个入界服务器代理或网关的数量,相当于客户端跟踪请求链。
Proxy-Authorization 允许客户端向代理标识自己,该代理需要认证。
Range 字节范围,可以指定单个实体中单个字节范围或范围集。
Referer 允许服务器为感兴趣的资源、日志、优化缓存等生成向后链接清单。
TE 指出愿意在响应中接受任何扩展的transfer-coding。
User-Agent 包含发起请求的用户代理(浏览器和OS)的信息。
Accept-Ranges 服务器指出对请求的资源可接受的范围,可以是字节数或none。
Age HTTP 使用改header 来传输从缓存服务器获取时的响应消息的估计年龄,是缓存服务器估计从响应产生或被原始服务器重新证实以来的总时间。
ETag 提供所请求的实体标签的当前值。
Location 用来重定向接收方到非URI 的位置来完成请求。对于201,Location 是由请求创建的新资源的标识。
Proxy-Authenticate 该header 必须作为407 响应的一部分,指出认证方案和可应用到代理的URI 上的参数。
Retry-After 能与503 响应一起用于指出希望该服务对客户端可以维持多久,。
Server 指出服务器使用的软件信息。
WWW-Authenticate 必须包括在401中,值至少有challenge 组成,它指出认证方案和可应用到URI 的参数。
Allow 客户端指出对URI 的资源允许的方法。
Content-Encoding 用作对media-type 的修饰符,其值将必须应用到实体body 上的额外内容编码。主要用来允许压缩而不丢失下层媒体类型标识。
Content-Language 客户端指出自己所选的语言,指出目标观众对所封装实体的自然语言。这可能与实体body 内所有语言相同。
Content-Length 指出实体body 按十进制数的字节流的尺寸。
Content-Location 如果实体能从独立于请求URI 的位置访问,则服务器可以提供该实体自己的位置。
Content-MD5 是实体body 的MD5 摘要,以便提供端到端的完整性检查。
Content-Range 与实体body 的一部分一起发送,用来指定该部分body 应用到全部body的哪个地方。
Content-Type 指出发送给接收方的实体body 的媒体类型,媒体类型参见IANA。
Expires 指出响应被认为过期的日期/时间。
Last-Modified 指出原始服务器认为该变量最后修改的日期和时间,确实意思取决于原是服务器的实现和资源的属性。对文件,可能只是文件系统内最后修改时间。
状态码 意义
100 Continue
101 Switching Protocols
200 OK
201 Created
202 Accepted
203 Non-Authoritative Information
204 No Content
205 Reset Content
206 Partial Content
300 Multiple Choices
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
305 Use Proxy
307 Temporary Redirect
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Time-out
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Request Entity Too Large
414 Request-URI Too Large
415 Unsupported Media Type
416 Requested range not satisfiable
417 Expectation Failed
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Time-out
505 HTTP Version not supporte