Http1.0和Http1.1的区别

57 阅读3分钟

Http1.0和Http1.1主要是在以下几个方面的区别

连接方式

Http1.0默认使用短连接 在一个TCP连接上只传送一个HTTP请求和响应

Http1.1默认使用长连接:在一个TCP连接上可以传送多个HTTP请求和响应

注意:

HTTP1.0默认短连接但也可以开启长连接,需要手动设置请求头 Connection:Keep-Alive

HTTP1.1默认开启长连接,如果要使用短连接,加入 Connection:close 才关闭。

状态码

http1.1新增了大量的状态码

例如:

100 continue 预请求接收状态码

206 Partial Content 范围请求

Host字段

Http1.1在请求头中添加了Host字段

在Http1.0中认为一个IP应该只绑定一个服务器,但随着虚拟主机技术的发展,一台物理服务器上可以存在多台主机,他们共享一个IP,所以通过IP找到服务器后还需要通过Host字段确定请求的是哪一台主机

范围请求

HTTP1.0中存在一些浪费带宽的现象,例如:(1)客户端只需要某个对象的一部分,而服务器却将整个对象发送过来;(2)下载大文件不支持断点续传功能,在发生断连后需要重新下载完整的包。

HTTP1.1则在请求头中引入range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content) ,这样就方便了开发者自由的选择以便于充分利用带宽和连接。如果一个响应包含部分数据的话,那么将带有206(Partial Content)状态码。该状态码的意义在于避免了HTTP/1.0代理缓存错误地把该响应认为是一个完整的数据响应,从而把他当作为一个请求的响应缓存

缓存处理

HTTP1.0中使用expires Last-Modified和条件GET If-Modified-Since来判断缓存是否过期

HTTP1.1中增加了If-None-Match 字段与响应头部中的 ETag 字段来判断缓存是否过期

Last-Modified 在第一次请求获得数据后会把数据在本地缓存,并且取得响应头中保存的该记录的上一次修改时间Last-Modify和计算过期时间Expires,当后续的相同请求时就会先获取缓存的数据,若数据未过期(本地时间未超过Expires)则直接使用该数据,若过期了发起请求向服务端发起请求,请求头中携带If-Modified-Since:字段,值为之前保存的Last-Modify的值,若服务端发现在该时间之后文件未修改则返回304状态码,修改了则返回最新的数据

If-None-Match的方式和上面的差不多,不过比较的不是时间,而是 Etag:响应资源的唯一标识,当过期了会将请求头 If-None-Match 值设置为 Etag 的值。服务器收到请求后进行比对,如果资源没有变化返回 304,如果资源变化了返回 200