浅谈Go与习题(三十五)

102 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 25 天,点击查看活动详情

今天来学习下Go常见的习题问题(三十五),也是面试中可能会遇到的,让我们来一起学习吧~

http/1.1 与 http/2.0

http/1.1优点:

  • http/1.1改善了http/1.0短连接的问题,可以减少短连接的带来性能开销
  • 支持pipeline管道传输,不需要排队发送请求,可以连着发送请求

缺点:

  • 请求和响应头没有经过压缩,首部如果数据量太大,会导致延迟大,只能压缩Body数据部分
  • 每次发送相同的头部信息,会造成数据冗余
  • 服务器是按照顺序回答消息,还是会造成阻塞
  • 没有请求优先级的功能
  • 服务端不能发起请求

http/2.0

2.0协议是基于https的优化而来,所以2.0的安全性是毋庸置疑的,那么相比于1.1协议来说

  • 加上了头部压缩,可以减少数据冗余
  • 替换了文本格式,改为二进制格式,数据量变少
  • 并发传输
  • 服务器可以自己发起请求
  1. 头部压缩用到的算法:HPACk算法,客户端和服务器会共同维护一个头部信息表,发送的头部数据都会存入这张表里,每次只要发送索引号就可以降低延迟

  2. 编码格式改为二进制,头部信息和数据体都改成二进制,这样可读性变差了,但是对于计算机来说无疑是友好的,解析速度就提高,传输效率也会提高,举个例子

在http/1.1中发送200 : 二进制编码为:00110010(在ASCII表中表示为2) 00110000 00110000  用了3个字节,
在http/2.0中发送200 : 二进制编码为:10001000 只用了一个字节(这里是用到了静态表的传输形式,第一位是表示在静态表中存在数据,后面7位代表在表中的位置
  1. 并发传输:多个Stream复用一个TCP连接,一个Stream包含多个Message,Message包含多个Frame是以http/2.0的最小单位,不同的Stream的有专门的ID,最后可以根据ID来重新组装数据

  2. 服务器发送数据:服务器也可以创建Stream流,也有ID号但是要和客户端的区分开来,服务器的是偶数,客户端的是奇数

总结

今天浅谈了Go的习题(三十五),主要介绍了GO面试中会出现的问题,接下来会继续分享其他的习题的相关知识,对于一个刚入门的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!