共计 2323 个字符,预计需要花费 6 分钟才能阅读完成。
???? 几个疑问:
浏览器输入 URL 后都发生了什么?
什么是三次握手,四次挥手?
什么是长连接?为什么需要长连接?
HTTP 有什么缺陷?有什么解决办法吗?
HTTPS 创建过程是怎样的?为什么 HTTPS 就是安全的?
HTTP2 是什么?有什么优势?
HTTP2 的信线复用为什么能提高性能?
TCP/IP 协议族
要了解 HTTP,需要先了解下 TCP/IP 协议族。
概念
协议中有各式各样的内容,比如电缆的规格到 IP 地址的选定方法、寻找异地用户的方法、双方建立通信的顺序、web 页面显示需要处理的步骤等,把这些与互联网相关联的各类协议集合起来总称为 TCP/IP 协议族。
TCP/IP 分层管理
TCP/IP 协议族分为:应用层、传输层、网络层、链路层。
应用层:决定了向用户提供应用服务时通信的活动,HTTP 协议也处于这一层。
传输层:对上层应用层提供处于网络连接中两台计算机间的数据传输,TCP(传输控制协议)处于这一层。
网络层:处理在网络上流动的数据包(选择一条传输路线)。
链路层:处理链接网络的硬件部分。
由上,HTTP,TCP,IP,DNS 是 TCP/IP 协议族的一个子集并且处于各自的层级之中。
HTTP 进化史
几个知识点:
???? HTTP1.1 版本中的持久连接(长连接)是怎么回事?
HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接(短连接),这样无谓的 TCP 连接和断开会增加通信量的开销,为了解决这个问题,HTTP1.1 版本中提出了持久连接(HTTP keep-alive),只要任何一端没有明确提出断开连接,则保持 TCP 连接状态,这样可以建立一次 TCP 连接后多次进行请求和相应的交互。
优点:减少了 TCP 连接的重复建立和断开所造成了额外开销,减轻了服务端负载以及提高了 web 页面的显示速度。
???? HTTP1.1 版本的管线化是怎么回事?从前发送请求后需要等待并接收到响应,才可以发送下一个请求,管线化技术出现后,不用等待响应就可以直接发送下一个请求,实现了同时并行发送多个请求的功能。
HTTP 协议
HTTP 协议如何通信?
HTTP 协议:用于客户端和服务端之间通过请求和响应达成通信。
在一个 HTTP 请求创建的时候会创建一条 TCP 连接,HTTP 的所有请求都是在这个 TCP 连接的基础上发送的。
HTTP 通信的桥梁 – TCP
TCP 位于传输层,提供可靠的字节流服务。
为了方便通信,将大块数据分割成报文段(按序号),把每个报文段可靠的(三次握手策略 (标记:SYN,ACK))传递给对方。
三次握手策略:
step1. 客户首先发送一个带 SYN 标志的数据包给对方
step2. 服务端接收后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息
step3. 客户端再回传一个带 ACK 标志的数据包,代表握手成功
若握手过程中某个阶段中断,TCP 协议会再次以相同顺序发送相同数据包。
那,浏览器输入 URL 回车后都发生了什么?
上图是客户端访问一个页面的流程图,HTTP 通信过程中,密切相关的几个协议都起到了哪些作用?
DNS 职责:解析域名并返回 IP 地址给客户端 ⬇️
HTTP 协议职责:生成针对 web 目标服务器的 HTTP 请求报文 ⬇️
TCP 协议职责:为了方便通信,将 HTTP 请求报文按序号分割成报文段,把每个报文段可靠的(三次握手 (标记:SYN,ACK))传递给对方⬇️
IP 协议职责:搜索对方地址,一边中转一边传送⬇️
TCP 协议职责:将对方那接收到的报文段按原来顺序重组请求报文⬇️
HTTP 协议职责:对 web 服务器请求的内容进行处理,请求的处理结果也同样利用 TCP/IP 通信协议向用户回传
HTTP 状态码
HTTP 状态码:告知从服务器端返回的请求结果。
???? 类别
1xx:信息性 – 接收的请求正在处理 2xx:成功 – 请求正常处理完毕 3xx:重定 – 需要进行附加操作已完成请求 4xx:客户端错误 – 服务器无法处理请求 5xx:服务器错误 – 服务器处理请求出错
???? 常用状态码 200:请求处理成功 204:请求处理成功,但是没有资源可以返回
301:永久性重定向,请求的资源已经被分配新的 URI,以后应使用现在所指的 URI302:临时性重定向,请求的资源已经被分配新的 URI,希望用户使用新的 URI 更新 303:请求对应的资源存在另一个 URI,应使用 get 方法定向获取请求的资源
400:请求报文中存在语法错误 401:请求需要有通过 http 认证的认证信息,如果之前已经进行过一次请求认证则表示用户认证失败 403:请求被服务器拒绝 404:服务器上找不到请求的资源
500:服务器执行请求时出错 503:服务器正在进行停机维护或正在处理超负载,无法处理请求
HTTP 的缺陷
???? 可能被窃听 – 第三方可以获知通信内容 ①
HTTP 没有加密功能,报文都是以明文的方式发送的,第三方可以劫持通信内容造成数据泄露等问题
???? 可能被冒充 – 第三方可以冒充他人身份参与通信 ②
HTTP 通信不会对通信方进行确认,任何人都可以伪装成通信方和你通信,伪造虚假服务器欺骗用户,实现钓鱼欺诈,然而用户根本无法察觉
???? 可能被篡改 – 第三方可以修改通信内容 ③
因为 HTTP 协议无法证明通信报文的完整性,也没办法确认发出的请求 / 响应以及接收到的请求 / 响应是前后相同的,在通信的过程中第三方可以截获并修改你的内容,然而通信内容被篡改了也是没办法知晓的。
那么这些弊端怎么解决呢?用 HTTPS,HTTPS = HTTP + 加密(①)+ 认证(②)+ 完整性保护(③)
神奇的 HTTPS
HTTPS 不是应用层的新协议,是在 HTTP 和 TCP 中间加了一层 SSL,组合成了 HTTPS。
传送门:HTTPS 的通信过程
???? 资料:
HTTPS 的通信过程
《图解 HTTP》
HTTP 协议原理 + 实践视频 [慕课网 @jokcy 老师]