http不同版本的特点

117 阅读3分钟

http/0.9

http/0.9一般只是用来请求HTML文件的

流程:

  • 客户端根据IP,端口与服务器建立TCP(进行三次握手)
  • 建立连接后,发送GET,例如:GET/index.html来获取index.html
  • 服务端收到后,以ASCLL字符流返回给客户端

特点:

  • 只有请求行,没有http请求头与请求体
  • 服务端也没有返回头信息
  • 都是以ASCLL字符流来传输的,因为都是HTML格式文件

http/1.0

http/1.0支持js,css,img,音视频等文件,不能简单使用ASCLL编码

特点:

  • 引入请求头与响应头,以key-value格式存储,在请求发送时携带上
// 请求头
accept:text/html
accept-encoding: 指定压缩
accept-Charset:指定编码
accept-languege:指定语言
// 响应头
content-encoding:
content-type
  • 引入了状态码
  • 提供了cache机制
  • 提供了用户代理
  • http1.1

每次http通信,都需要建立TCP,传输数据,断开TCP。

特点

  • 添加持久连接的方法,一个TCP可以传输多次HTTP,只要没有某一段确认要断开
在http/1.1,持久连接默认是开启的,如果不需要,添加connection:close。对于浏览器同一个域名,默认同时建立6个TCP持久连接
  • 管线化
持久连接可以减少TCP的建立与断开,但是需要等待前面的请求返回之后,才能进行下一次请求,所以可能会出现堵塞的问题
管线化:把多个http请求一起交给服务端,可以一起发送但是服务器还是需要按顺序来执行,这个技术最终没有成功
  • 虚拟主机的支持
  • 对动态生成内容的支持
在http/1.0里,会在响应头里设置完整数据大小,contnet-lenght,
但是可能存在,数据是动态的,不知道最终的大小,浏览器也不知道何时接收完全部文件数据
http/1.1引入chunk transfer机制,把数据切割为小块,每一块发送附上数据块的长度。
最后一块传递0,表示完毕
  • 客户端cook,
  • 优化:CDN实现域名分片机制

域名分片其实很简单,就是申请多个域名,但这些域名最后都映射到同一个网站服务器,这样就可以突破浏览器的限制,让连接数是8*域名的个数。

缺点:

  • 对宽带(每秒最大能发送或接收的字节数)利于不好

    原因

  • tcp启动慢

  • 多个TCP,竞争固定宽带,假设请求多个域名,每个域名6个TCP,下载时候,宽带不足,每个TCP动态减少接收数据速度,所以可能影响关键资源下载

  • 1.1对头堵塞

http2多路复用

  • http/2.0是一个域名用一个TCP长连接,一个页面只需要一次慢启动,同时也避免了多个TCP的竞争问题
  • http/2.0实现了资源的并行请求(解决队头堵塞问题),任何请求都可以四u是发送,不需要登台其他请求的完成
  • 多路复用机制:每个请求都有一个ID,可以把请求分为一帧一帧的数据传输,这样的好处,可以优先处理请求

过程:

  • 发送会经过二进制分证层,被转换为带有ID的争
  • 服务端收到,把相同id争,进行合并
  • 然后服务端进行处理,在返回给二进制层,浏览器收到在处理

其他特点:

  • 可以设置请求的优先级
  • 服务器推送:例如:请求一个html页面后,服务器知道了需要用的其他资源,可以直接发送过去
  • http2/对请求头,响应头进行了压缩