http

155 阅读6分钟

http是超文本传输协议

http工作流程?

1.浏览器与服务器建立TCP链接,即三次握手

2.链接成功,浏览器发送http请求

3.服务器接收请求并返回http响应

4.服务器关闭,即四次挥手

5.浏览器解析请求的资源

http1/http1.1/http2/http3区别?

http1

特点:

  • 每次请求都必须新建一次连接,必须通过TCP的三次握手才能开始传输数据,连接结束之后还要经历四次挥手

  • 不跟踪每个浏览器历史请求

缺点:

  • 连接无法复用,每个请求都需要建立一个TCP连接,费时费力

  • 队头阻塞(浏览器6次请求,第一次未达到后面请求不发送,高延迟带来页面加载速度降低)

http1.1

特点:

  • 支持长连接,通过keep-alive保持http连接不断开,避免重复建立TCP连接

  • 管道化,通过长连接实现一个连接中传输多个文件

  • 加入缓存处理(新字段cache-control)

  • 新增host字段,实现一台web服务器可以同一个ip地址和端口号上使用不同的主机名来创建多个虚拟站点

  • 添加其他请求方法,put、delete、options(zhuanlan.zhihu.com/p/25441947)

缺点:

  • 高延迟,队头阻塞

  • 无状态特性,阻碍交互(带来巨大头部)协议对于连接状态没有记忆能力。纯净的HTTP是没有cookie等机制的,每一个连接都是一个新的连接。上一次请求验证了用户名密码,而下一次请求服务器并不知道它与上一条请求有何关联)

  • 明文传输不安全(传输内容没有加密,中途可能篡改和劫持)

  • 不支持服务端推送

  • HTTP1.1对带宽的利用率并不理想(带宽是指每秒最大能发送或接收的字节数),HTTP1.1很难将带宽装满:

    • 一是因为TCP的慢启动(为了减少网络拥塞的策略),一个TCP连接建立后,就进入发送数据状态,刚开始TCP协议会采用一个非常慢的速度去发送数据,而页面中常用的一些关键资源文件本来就不大,如HTML文件、CSS文件和JavaScript文件,通常这些文件在建立好连接之后就要发起请求,但这个过程慢启动,耗费时间就要更多。

    • 二是因为同时开启了多条TCP连接,那么这些连接会竞争固定的带宽

    • 三是队头阻塞问题

http2

特性:

  • 二进制传输:将请求和响应数据分为更小的帧,并且采用二进制编码

  • 多路复用--解决队头阻塞(同一个域名下所有通信都是单个连接上完成,单个连接可以承载任意数量的双向数据流,数据流以消息形式发送,而消息由一个或多个帧组成,可以乱序发送)

  • 头部压缩--解决巨大的HTTP头部(使用专门的HPACK算法,每次请求和响应只发送 差异头部,一般可以达到50%~90%的高压缩率)

  • 请求优先级--先获取重要数据(虽然无线的并发流解决了队头阻塞的问题,但是如果带宽受限,客户端可能会因防止堵塞通道二阻止请求。在网络通道被非关键资源堵塞时,高优先级的请求会被优先处理)

  • 服务器推送--填补空缺(服务端可以新建“流”主动向客户端发送消息,提前推送客户端需要的静态资源,减少等待延迟)

  • 提高安全性(HTTP2也是明文的,只不过格式是二进制的,但HTTP2都是https协议的,跑在TSL上面)

缺点:

  • TCP+TLS建立连接的时间是主要瓶颈:

    • 没有从根本上解决队头阻塞问题,一旦遇到丢包,TCP协议还是会重新发送数据。我们知道在HTTP/2中,多个请求是跑在一个TCP管道中的,如果其中任意一路数据流中出现了丢包的情况,那么就会阻塞该TCP连接中的所有请求。这不同于HTTP/1.1,使用HTTP/1.1时,浏览器为每个域名开启了6个TCP连接,如果其中的1个TCP连接发生了队头阻塞,那么其他的5个连接依然可以继续传输数据

http2的请求和连接过程?

1.首先,浏览器准备好请求数据,包括了请求行、请求头等信息,如果是POST方法还有请求体。

2.这些数据经过二进制分帧层处理之后,会被转换为一个个带有请求ID编号的帧,通过协议栈将这些帧发送给服务器。

3.服务器收到所有帧后,会将所有相同ID的帧合并为一条完整的请求信息

4.服务器处理该条请求,并将处理的请求行、响应头和分别送至二进制分帧层

5.同样,二进制分帧层会将这些响应数据转换为一个个带有请求ID编号的帧,经协议栈发送到浏览器

浏览器接受响应帧后,会根据ID编号将帧的数据提交给对应的请求

htt3 (HTTP3甩掉TCP、TSL的包袱,构建高效网络QUIC协议)

特性:

  • 基于udp协议,建立快速握手

  • 继承TSL的加密功能

  • 多路复用,彻底解决阻塞问题(一个物理连接上可以有多个独立的逻辑数据流,实现了数据流的单独传输)

  • 实现了类似TCP的流量控制、传输可靠性的功能

总结:

1.HTTP1.0:

  • 浏览器与服务器只保持短暂的连接,浏览器每次请求都需要与服务器建立一个TCP连接

2.HTTP1.1:

  • 引入了持久连接(TCP默认不关闭,可以被多个请求复用)

  • 在同一个TCP连接里,客户端可以发送多个请求

  • 多个请求按次序在服务端被处理

  • 新增了一些请求方法、请求头和响应头

3.HTTP2.0:

  • 采用二进制格式而非文本格式

  • 完全多路复用,而非有序并阻塞的、只需要建立一个连接即可实现并行

  • 使用报头压缩,降低开销

  • 服务器推送

4.HTTP3.0

  • QUIC 基于 UDP 实现,是 HTTP/3 中的底层支撑协议,该协议基于 UDP,又取了 TCP 中的精华,实现了即快又可靠的协议。

http和https区别?

http

  • 端口号80

  • 明文传输

https

  • 端口号443

  • 是以安全为目标的http通道,安全基础是ssl/tsl在tcp/ip协议和各种应用层中间为数据提供安全支持

  • 证书加密,对称加密/非对称加密