🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> ### 一次完整的Http请求过程 * 域名解析 * 本地缓存,包括浏览器缓存,hosts文件,操作系统自身的DNS缓存 * DNS服务器 * 返回ip * 发起`TCP`的3次握手,建立连接 * 建立TCP连接后发起http请求 * http * https,SSL协议,验证安全性 * 服务端响应 * 网关nginx通过url路径,路由到对应的后台服务器 * 后台服务器把请求信息包装成servlet等数据结构,交给业务代码进行处理 * 返回结果 * 前端解析 * json * html * TCP断开连接,四次挥手 <br/> > ### `Http`连接 * 三次握手,三次握手的目的为了确认双方都有收发数据的能力。 ``` 第一次: A->B,证明A有发消息的能力。 第二次: ->B && B->A,证明B有收消息,并且有发消息的能力。 第三次: A->B,证明A有收消息的能力。 ``` * 四次挥手 ``` 第一次: A -> B A告诉B,A要断开连接了 第二次: B -> A B告诉A,我知道你要断开了 第三次: B -> A B告诉A,好了把最后一点数据发给你,我也不说了 第四次: A -> B A告诉B,知道了 ``` <br/> > ### `HTTP`, `HTTP1.1`,`HTTP2.0` * `http1.1`相比`http1.0` * 引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match * 带宽优化,新增range字段,发送内容的一部分,断点续传功能 * 支持长连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启`Connection:keep-alive` * 新增了`host`域 * `http2.0`相比于`http1.x` * 新的二进制格式,HTTP1.x的解析是基于文本。HTTP2.0的协议解析决定采用二进制格式。 * `http2.0`多路复用,多个请求在一个tcp连接上并行执行,`http1.1`的长连接则是多个请求在一个tcp连接上串行执行 * 支持首部压缩 * 服务器推送,服务器可以对一个客户端请求发送多个响应。换句话说,除了对最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确地请求。