HTTP 必知必会
HTTP 协议的本质就是一种浏览器与服务器之间约定好的通信格式
HTTP工作原理

用户通过浏览器进行了一个操作,比如输入网址并回车,或者是点击链接,接着浏览器获取了这个事件。
浏览器向服务端发出 TCP 连接请求。
服务程序接受浏览器的连接请求,并经过 TCP 三次握手建立连接。
浏览器将请求数据打包成一个 HTTP 协议格式的数据包。
浏览器将该数据包推入网络,数据包经过网络传输,最终达到端服务程序。
服务端程序拿到这个数据包后,同样以 HTTP 协议格式解包,获取到客户端的意图。
得知客户端意图后进行处理,比如提供静态文件或者调用服务端程序获得动态结果。
服务器将响应结果(可能是 HTML 或者图片等)按照 HTTP 协议格式打包。
服务器将响应数据包推入网络,数据包经过网络传输最终达到到浏览器。
浏览器拿到数据包后,以 HTTP 协议的格式解包,然后解析数据,假设这里的数据是 HTML。
浏览器将 HTML 文件展示在页面上。
HTTP/2
http/2 在 http/1.1基础上的变更
二进制协议,不再是纯文本
可发起多个请求,废弃了 1.1 里的管道
使用专用算法压缩头部,减少数据传输量
允许服务器主动向客户端推送数据
增强了安全性,“事实上”要求加密通信
HTTP传输的是超文本
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
在互联网早期,“文本”只是简单的字符文字,但发展到现在,“文本”的涵义已经被大大地扩展了,图片、音频、视频、甚至是压缩包,在 HTTP 眼里都可以算做是“文本”
所谓“超文本”,就是“超越了普通文本的文本”,它是文字、图片、音频和视频等的混合体,最关键的是含有“超链接”,能够从一个“超文本”跳跃到另一个“超文本”,形成复杂的非线性、网状的结构关系。
HTTP 传输模型
TCP/IP 四层协议

第一层叫“链接层”(link layer),负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层。
第二层叫“网际层”或者“网络互连层”(internet layer),IP 协议就处在这一层。因为 IP 协议定义了“IP 地址”的概念,所以就可以在“链接层”的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。
第三层叫“传输层”(transport layer),这个层次协议的职责是保证数据在 IP 地址标记的两点之间“可靠”地传输
协议栈的第四层叫“应用层”(application layer),由于下面的三层把基础打得非常好,所以在这一层就“百花齐放”了,有各种面向具体应用的协议。例如 Telnet、SSH、FTP、SMTP 等等,当然还有我们的 HTTP
OSI 七层协议

第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
第二层:数据链路层,它基本相当于 TCP/IP 的链接层;
第三层:网络层,相当于 TCP/IP 里的网际层;
第四层:传输层,相当于 TCP/IP 里的传输层;
第五层:会话层,维护网络中的连接状态,即保持会话和同步;
第六层:表示层,把数据转换为合适、可理解的语法和语义;
第七层:应用层,面向具体的应用传输数据。
四层与七层的对应关系

所谓的“四层负载均衡”就是指工作在传输层上,基于 TCP/IP 协议的特性,例如 IP 地址、端口号等实现对后端服务器的负载均衡
所谓的“七层负载均衡”就是指工作在应用层上,看到的是 HTTP 协议,解析 HTTP 报文里的 URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器
评论