HTTP1.0存在的问题
- HTTP 1.0默认使用短连接
- 规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪,每个客户也不记录过去的请求。要建立长连接,可以在请求消息中包含Connection: Keep-Alive头域,如果服务器愿意维持这条连接,在响应消息中也会包含一个Connection: Keep-Alive的头域。
- Host域
- 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发 展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。
- 带宽浪费
- HTTP/1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了。又比如下载大文件时不支持断点续传功能,在发生断连后不得不重新下载完整的包。
HTTP1.1优势
- 长连接
- HTTP1.1支持长连接和请求的流水线(Pipelining)处理,并且默认使用长连接,如果加入"Connection: close ",才关闭。
- Host域
- HTTP1.1在Request消息头里头多了一个Host域,而且是必传的,HTTP1.0则没有这个域。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。
- 带宽优化
- HTTP/1.1中在请求消息中引入了range头域,它支持只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206(Partial Content),它可以防止Cache将响应误以为是完整的一个对象。
其它
HTTP/1.1加入了一些新的方法和状态码
- HTTP1.1增加了OPTIONS,PUT, DELETE, TRACE, CONNECT这些Request方法;HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。具体用法为:客户端在Request头部中包含Expect: 100-continue
Cache(缓存)
HTTP1.0
在HTTP/1.0中,已经定义不少有关缓存的头域:
- Expires:浏览器会在指定过期时间内使用本地缓存,指明应该在什么时候认为文档已经过期,从而不再缓存它,时间为格林威治时间GMT。例如: Expires: Thu, 19 Nov 1981 08:52:00 GMT
- Last-Modified:请求对象最后一次的修改时间,用来判断缓存是否过期 通常由文件的时间信息产生
- Date:生成消息的具体时间和日期,即当前的GMT时间。例如: Date: Sun, 17 Mar 2013 08:12:54 GMT
- If-Modified-Since:客户端存取的该资源最后一次修改的时间,用来和服务器端的Last-Modified做比较
- Set-Cookie: 用于把cookie 发送到客户端。例如: Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
- Pragma:no-cache:客户端使用该头域说明请求资源不能从cache中获取,而必须回源获取。
HTTP1.1
HTTP/1.1在1.0的基础上加入了一些cache的新特性
- 当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。
- 为了使caching机制更加灵活,HTTP/1.1增加了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指示客户机可以接收超出超时期间的响应消息。
- must-revalidate:如果数据是过期的则去服务器进行获取
而且在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存 处理过程
- Cache使用关键字索引在磁盘中缓存的对象:在HTTP/1.0中使用资源的URL作为关键字,但可能存在不同的资源基于同一个URL的情况,要区别它们还需要客户端提供更多的信息,如Accept-Language和Accept-Charset头域。为了更好的支持这种内容协商机制(content negotiation mechanism),HTTP/1.1在响应消息中引入了Vary头域,该头域列出了请求消息中需要包含哪些头域用于内容协商。