http版本区别

117 阅读3分钟
  • http1.0
  1. 短链接,每次发送请求都重新建立tcp链接(3次握手,4次挥手),性能较差。(每一次建立 TCP 连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。如果多次请求,势必就会对服务器产生较大的资源性能损耗。)

  2. 没有host头域。

  3. 不允许断点续传,而且不允许传输对象的一部分,要求传输整个对象。

    对于断点续传的理解:以前在下载的过程中,用户不能使用现在这种高速的带宽访问互联网,当时下载一个尺寸稍大的照片或者文件就已经很吃力了。如果在下载的过程中遇到网络中断的情况,那就不许重新开始。为了解决这种情况,需要一种可恢复的机制,所谓恢复就是指能从之前下载中断处恢复下载。(断电续传是这个意思吗)。为了解决这个问题,使用 获取部分内容的范围请求 :要实现该功能需要指定下载的实体范围,像这样,指定范围发送的请求叫做范围请求(Range Request)。
    
  4. 发送请求的方法:GET,POST,PUT,DELETE,HEAD,LINK,UNLINK。

  • http1.1
  1. 引入更多的缓存策略。(http1.0只存在expires/if-modified-since.http1.1多加了Etag,cache-control ...)。
  2. 在请求头中引入了range头域,允许只请求资源的某个部分。

对于range,是为了解决断点续传的问题吗。

. 例如:对于一份10000字节大小的资源,如果使用范围请求,可以只请求5001~10000字节的资源。

. 这样的话,在请求头中添加字段:

```js
 Range: bytes = 5001 - 10000
```

. 响应头中的信息是:
```js
HTTP/1.1 206 Partial Content
Date: Fri, 13 Jul 2012 04:39:17 GMT
Content-Range: bytes 5001-10000/10000
Content-Length: 5000
Content-Type: image/jpeg
```

针对范围请求:响应会返回状态码206 Partial Content 的响应报文。多重范围的范围请求,响应会在首部字段Content-Type表明multipart/byteranges后返回响应报文。如果服务端无法响应范围请求,则会返回状态码200 OK 和完整的实体内容。

3. host头处理(必须有,没有报400),让服务端知道请求的是哪个域名。 4. 支持长链接复用(一个tcp链接可以发送多个http请求),connection:keep-alive(默认开启)。

   持续链接的特点是:只要任意一端没有明确的提出断开链接,则保持tcp链接。持续链接的好处在于减少了tcp链接的重复建立和断开所造成的开销,减轻了服务端的负载。另外减少开销的那部分时间使得http请求和响应能够更早的结束,这样web页面的显示速度也就相应提高了。

5. HTTP1.1相对于HTTP1.0新增了OPTION,TRACE,CONNECT方法,废除了LINK,UNLINK方法。( 方法名区分大小写,注意都要大写。)

  • http2.0
  1. 新的二进制格式(Binary Format)。之前的版本都是文本协议。
  2. 多路复用(链接共享)。
  3. header压缩。 (HPACK算法对头部进行压缩,既避免了重复header的传输,又减小了需要传输数据的大小。)
  • http3.0
  1. 基于google的quic协议,使用udp而不是tcp。
  2. 解决了http2.0前一个stream丢包,后一个stream阻塞的问题。
  3. 优化了重传策略。