http面试准备

205 阅读4分钟

HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

http的优点及缺点

优点:

     1.灵活可扩展
     2.请求应答模式
     3.基于TCP的可靠连接
     4.无状态(一方面可以减少网络开销,一方面不能保存用户的登陆信息)

缺点:

    1.无状态
    2.明文传输,不安全即协议里的报文(主要指的是头部)不使用二进制数据,而是文本形式。这让HTTP的报文信息暴露给了外界,给攻击者带来了便利。
    3.队头堵塞
    

http 0.9

  1. 只支持get,过时,仅支持纯文本发送

http1.0

  1. 可以传输文本、视频、图像、二进制码
  2. 支持get,post,head
  3. 每次通信都必须包括头信息(HTTP header),用来描述一些元数据。
  4. 缓存相关:使用 header 中的 If-Modified-Since 和 Expires 作为缓存失效的标准
  5. 不支持断点传输

http1.1(主流协议版本,用的最多)

  1. 持续连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。长连接的连接时长可以通过请求头中的 keep-alive 来设置。
  2. 支持断点续传,通过使用请求头中的 Range 来实现
  3. 缓存相关:HTTP 1.1 中新增加了 E-tag,If-Unmodified-Since, If-Match, If-None-Match 等缓存控制标头来控制缓存失效。
  4. 新增方法:PUT、 PATCH、 OPTIONS、 DELETE。

http1.0/1.1的缺点

  1. 明文传输
  2. 复用TCP连接造成的对头堵塞
  3. 对于单文件被不断请求的服务,Keep-alive会极大影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间。

http2.0

  1. 采用二进制分帧,头信息和数据体都是二进制,并且统称为"帧":头信息帧和数据帧。
  2. 头部压缩,HTTP 1.1版本会出现 「User-Agent、Cookie、Accept、Server、Range」 等字段可能会占用几百甚至几千字节,而 Body 却经常只有几十字节,所以导致头部偏重。HTTP 2.0 使用 HPACK 算法进行压缩。
  3. 多路复用 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,这样子解决了队头阻塞的问题。
  4. 服务器推送

http2.0的关键点解释

1.采用HPACK来解决头部压缩

image.png

  • 类似于索引表,每个索引表对应一个值,比如索引为2对应头部中的method头部信息,这样子的话,在传输的时候,不在是传输对应的头部信息了,而是传递索引,对于之前出现过的头部信息,只需要把「索引」(比如1,2,...)传给对方即可,对方拿到索引查表就行了。

  • 2.对于整数和字符串进行 「哈夫曼编码」

2.多路复用

  • HTTP 1.x 中,如果想并发多个请求,必须使用多个 TCP 链接,且浏览器为了控制资源,还会对单个域名有 6-8个的TCP链接请求限制。 HTTP2中:
  • 同域名下所有通信都在单个连接上完成。
  • 单个连接可以承载任意数量的双向数据流。
  • 数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装,也就是Stream ID,流标识符,有了它,接收方就能从乱序的二进制帧中选择ID相同的帧,按照顺序组装成请求/响应报文。

3.服务器推送

  • 浏览器发送一个请求,服务器主动向浏览器推送与这个请求相关的资源,这样浏览器就不用发起后续请求。
  • 客户端可以缓存推送的资源

4.二进制分帧

  • 之前是明文传输,不方便计算机解析,对于回车换行符来说到底是内容还是分隔符,都需要内部状态机去识别,这样子效率低,HTTP/2采用二进制格式,全部传输01串,便于机器解码。

5.多路复用

  • 在客户端与服务器之间,双方都可以互相发送二进制帧,这种双向传输的序列,称为,所以HTTP2.0中以流来表示一个TCP连接上进行多个数据帧的通信,这就是多路复用概念。