HTTP 协议被设计得非常强大,但很多网络应用都没有利用这些强大之处。比如缓存和HTTP 方法。HTTP为资源的增删改查分别提供了PUT, DELETE, POST, GET等方法,确没有人用。所以,最近兴起的Restful只是对优化web架构、充分利用HTTP协议的能力的一个回归。下面是一些HTTP协议的概述:
消息:
HTTP协议中顶级数据单位,使用HTTP协议通信的机器之间来回发送的数据包。
实体:
只出现在有消息体的消息中。它按照实体header定义的格式和编码进行传输。
方法:
1 | OPTIONS: 客户端查询服务器对与某URL 允许的通信选项 |
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 |