前端面试题之——http1.0,http2.0,https

975 阅读5分钟

大家好,这是一个更文挑战。(写错的各位看官包容) 这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

http各个版本的特点

1. HTTP1.0

特点:

  1. 请求与响应支持 HTTP 头,响应含状态行,增加了状态码
  2. 支持 HEAD,POST 方法
  3. 支持传输 HTML 文件以外其他类型的内容

缺点:

  1. 非持久连接
  2. 客户端必须为每一个待请求的对象建立并维护一个新的连接,即每请求一个文档就要有两倍RTT 的开销(注:RTT(Round Trip Time):一个连接的往返时间,即数据发送时刻到接收到确认的时刻的差值 )
  3. 短连接增加了网络传输的负担

2. HTTP1.1

特点

  1. 支持长连接
  2. 在HTTP1.0的基础上引入了更多的缓存控制策略
  3. 引入了请求范围设置,优化了带宽
  4. 在错误通知管理中新增了错误状态响应码
  5. 增加了Host头处理,可以传递主机名(hostname)

缺点: 传输内容是明文,不够安全

3. HTTPS

特点:

  1. 端口是443
  2. HTTPS运行在安全套接字协议(Secure Sockets Layer,SSL )或传输层安全协议(Transport Layer Security,TLS)之上,所有在TCP中传输的内容都需要经过加密
  3. SSL运行在TCP之上
  4. HTTPS可以有效防止运营商劫持

其实最早的一个http的版本是http0.9, 感兴趣的同学可以自行了解

http各个版本都做了什么优化?

1. HTTP 1.x优化(SPDY)

  1. 多路复用,为多路复用设立了请求优先级
  2. 对header部分进行了压缩
  3. 引入了HTTPS加密传输
  4. 客户端可以在缓存中取到之前请求的内容

2. HTTP2.0(SPDY的升级版)

特点

  1. HTTP2.0支持明文传输,而HTTP 1.X强制使用SSL/TLS加密传输
  2. 和HTTP 1.x使用的header压缩方法不同
  3. HTTP2.0 基于二进制格式进行解析,而HTTP 1.x基于文本格式进行解析
  4. 多路复用,HTTP1.1是多个请求串行化单线程处理,HTTP 2.0是并行执行,一个请求超时并不会影响其他请求

上面这么做的好处:

  1. 在 HTTP1 中浏览器限制了同一个域名下的请求数量(Chrome下一般是6个),当在请求很多资源的时候,由于队头阻塞,当浏览器达到最大请求数量时,剩余的资源需等待当前的六个请求完成后才能发起请求。

下面是关于HTTP1.0和HTTP1.1不同浏览器同一域名下请求数量的个数:

WeChat714dbcff22acf7bac91c6872f3f8fe49.png

  1. HTTP2 中引入了多路复用的技术,这个技术可以只通过一个 TCP连接就可以传输所有的请求数据。多路复用可以绕过浏览器限制同一个域名下的请求数量的问题,进而提高了网页的性能

看下图:

WeChat4f8afc0cb21fb085ad42847e4a522a4e.png

3. HTTP 3.0 (QUIC)

特点:

  1. 基于UDP协议,为什么基于udp呢?主要是因为基于TCP的协议,由于切换网络之后,IP会改变,因而之前的连接不可能继续保持。而基于UDP的QUIC协议,则可以内建与TCP中不同的连接标识方法,从而在网络完成切换之后,恢复之前与服务器的连接
  2. 线头阻塞(HOL)问题的解决更为彻底
  3. 切换网络时的连接保持

HTTP1.0和HTTP1.1的一些区别?

1. 缓存处理

  • HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断
  • HTTP1.1引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略

2. 带宽优化及网络连接的使用

  • HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能

  • HTTP1.1在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接

2. 错误通知的管理

  • 在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除

2. Host头处理

  • 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址
  • HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

2. 长连接

  • HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

HTTPS与HTTP的一些区别

  1. HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费
  2. HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的
  3. HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题 看下图:

WeChatec551ffedaf69b9e4d855eea4f484c3c.png

(tcp/ip协议的分层,可以参见我的另一文章:# 前端面试题之——http(一)

以上就是今天的分享,希望能帮到大家