前后端数据的交换一般是基于 HTTP 协议。
HTTP 协议包括客户端和服务端两个实体,客户端发送请求给服务端,服务端返回响应给客户端。
在 HTTP 中,数据称为资源,可以是 html 文档、图片、也可以是普通文本。资源是通过 URL 进行定位的。
HTTP 是什么
Hyper Text Transfer Protocol
超文本传输协议,可以拆成三部分“超文本”“传输”“协议”。
HTTP 是一个协议
HTTP是一个用在计算机世界里的协议。
它使用计算机能够理解的语言确立了一种计算机的之间交流通信的规范,以及相关的各种控制和错误处理方式。
HTTP 是传输协议
所谓“传输”(transfer)就是它一些东西从 A 点搬至 B 点,或者从 B 点搬到 A 点。
即HTTP是一个“双向协议”,有两个最基本的参与者 A 和 B,从 A 开始到 B 结束,数据在 A 和 B 之间双向而不是意向流动。
数据虽然是在 A 和 B 之间传输,但并没有限制只有 A 和 B 这两个角色,允许中间有“中转”或者“接力”。
这样传输方式就从“A<===>B”,变成了“A<=>X<=>Y<=>Z<=>B”,A 到 B 的传输过程中可以存在任意多个“中间人”,而这些中间人也遵从 HTTP 协议,只要不打扰基本的数据传输,就可以添加任意的额外功能,例如安全认证、数据压缩、编码转换等,优化整个传输过程。
HTTP 是在一个计算机世界里专门用来在两点之间传输数据的约定和规范。
HTTP 是超文本传输协议
HTTP传输的“超文本”是什么呢?
“文本”(Text),就表示 HTTP 传输的不是 TCP/UDP 协议里被切分的杂乱无意的二进制包(datagram),而是完整的、有意义的数据,可以被浏览器、服务器程序这样在应用层处理。
“超文本”,就是“超越了普通文本的文本”,它是文字、图片、音频和视频等的混合体,最关键是含有“超链接”。能够从一个“超文本”跳跃至另一个“超文本”,形成复杂的非线性、网状结构关系。
HTTP 不是什么
因为 HTTP 是一个协议,是一种计算机间通信的规范,所以它不存在“单独的实体”。它不是浏览器、手机 APP 那样的应用程序,也不是 Windows、Linux 那样的操作系统,更不是 Apache、Nginx、Tomcat 那样的 Web 服务器。
但 HTTP 又与应用程序、操作系统、Web 服务器密切相关,在它们之间的通信过程中存在,而且是一种“动态的存在”,是发生在网络连接、传输超文本数据时的一个“动态过程”。
HTTP 不是互联网
互联网(Internet)是遍布于全球的许多网络互相连接而形成的一个巨大的国际网络,在它上面存放着各式各样的资源,也对应着各式各样的协议,例如超文本资源使用 HTTP,普通文件使用 FTP,电子邮件使用 SMTP 和 POP3 等。
HTTP 是构建互联网的一块重要拼图,而且是占比最大的那一块。
HTTP 不是编程语言
编程语言是人与计算机沟通交流所使用的语言,而 HTTP 是计算机与计算机沟通交流的语言,我们无法使用 HTTP 来编程,但可以反过来,用编程语言去实现 HTTP,告诉计算机如何用 HTTP 来与外界通信。
HTTP 不是HTML
HTML 是超文本的载体,是一种标记语言,使用各种标签描述文字、图片、超链接等资源,并且可以嵌入 CSS、JavaScript 等技术实现复杂的动态效果。
单论次数,在互联网上 HTTP 传输最多的可能就是 HTML,但要是论数据量,HTML 可能要往后排了,图片、音频、视频这些类型的资源显然更大。
HTTP 不是一个孤立的协议
在互联网世界里,HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等。这些协议相互交织,构成了一个协议网,而 HTTP 则处于中心地位。