HTTP
狐七 3/12/2022 计算机网络
# 1. HTTP有哪几种协议?
查看答案
- HTTP0.9(不是正式标准)
- HTTP1.0
- HTTP1.1
- HTTP2.0
- HTTP3.0
# 2. HTTP1.0的特点
查看答案
- TCP链接无法复用,每次请求都要三次握手,四次挥手
- 无法并行请求数据,容易造成队头阻塞
# 3. HTTP1.1的特点和优化点(区别)
查看答案
- 使用长链接
Connection:Keep-alive
,在一个TCP上可以发送多个HTTP请求和响应 - 使用管线化,浏览器可以并行发送请求,但是对于请求的响应依旧遵循先进先出,一个响应处理完后再处理下一个,并没有解决队头阻塞的问题。
- 增加了与缓存相关的请求/响应头
- 进行带宽优化,支持断点续传
- 新增错误类型,增强错误和响应码的语义特性
- 新增HOST头处理,若请求头中无HOST,就会报错
# 4. HTTP1.1存在的问题是什么?
查看答案
- HTTP1.1并没有解决队头阻塞的问题
- 明文传输,有安全隐患
- header内容多,增加传输成本
- 默认开启Keep-alive会造成性能压力(如果只有一个请求,长时间不关闭链接会造成性能压力)。
# 5. HTTP2.0和HTTP1.X的区别
查看答案
- 多路复用:
- 代替了HTTP1.x的序列和阻塞机制,所有的相同域名请求都通过一个TCP连接并发完成。在HTTP1.x中,并发多个请求需要多个TCP连接,浏览器为了控制资源都会有6-8个TCP连接限制。
- 一个域名下单个TCP上可以并行交错请求和响应,之间无不干扰。
- 可以并行多个请求,每帧分配一个流标识符id,通过id识别对应哪个请求,某请求超时也不会阻塞,解决了队头阻塞的问题。
- 而且还可以根据id进行优先级的分配,服务端可以确定处理顺序。
- 可以由客户端主动示意停止发送或减少发送的数据量。
- 服务器推送:
- HTTP/2 允许服务器未经请求,主动向客户端发送资源。
- 主动返回一些资源存到内存中(相当于预加载),但是客户端还是主导地位,可以发送 RST_STREAM 来显式的停止这种推送。
- 服务器主动推送的是静态资源,和 WebSocket 以及使用 SSE 等方式向客户端发送即时数据的推送是不同的。
- 头信息压缩:
- HTTP1.x带来的header有大量的信息,并且每次都要重复发送,HTTP2.0使用gzip 或 compress 压缩后再发送,且客户端和服务器同时维护一张头信息表,所有字段都生成一个索引号,每次只发送索引号。
- 采用HPACK压缩算法。
- 索引表中有静态表和动态表,静态表中最常用的http62个键值对,只发61个id,动态表中头信息只发一次,之后的就发id。
- 采用霍夫曼编码,专门用户字符串和数字压缩的,可以将索引表压缩到十几个字节或者几个字节。
- 使用二进制协议:新的二进制协议被称为二进制分帧层协议,可以分为头信息帧和数据帧,帧的概念是它实现多路复用的基础。HTTP1.x基于文本(ASCII 编码),文本协议解析缺陷很多,HTTP2.0的二进制格式解析更高效。
# 6. HTTP2.0是不是必须用HTTPS?
查看答案
在HTTP2上必须上SSL,但是现在浏览器在用的时候都在实现上要求添加https,也有一些浏览器不要求。
# 7. HTTP 3.0有什么特点?
查看答案
- TCP/IP 丢包会重新发包,基于UDP的QUIC协议,彻底解决队头阻塞
- 网络状态改变时连接保持,例如:WIFI断开、网络切换为3G或4G时
# 8. 说说长链接
查看答案
长短链接说的是TCP链接,TCP链接是一个双向通道,它可以保持一段时间不关闭。HTTP1.1中将Connection设置为Keep-alive,发送HTTP请求不需要每次都三握四挥,提升了一定的效率。长链接并不是永久链接,一段时间没有发送HTTP请求,长链接就会断开,超时时间可以在header中设置。
# 9. HTTP实现主动推送
查看答案
- 在HTTP1.1时代,服务器推送功能主要有三种途径:
- ajax短轮询
- ajax长轮询
- websocket
- HTTP2.0支持服务端推送
# 10. websocket和socket
查看答案
- socket是对tcp/ip协议的抽象,他是一组接口
- websocket是基于http,http基于tcp/ip所以websocket有http的请求头