什么是 HTTP ?你确定立马跳出:“HTTP 是超文本传输协议,就是 HyperText Transfer Protocol”。面试
这样回答仍是过于简单,那到底什么是 “超文本”,什么是 “协议”? HTTP 下面还有哪些协议? HTTP 有什么缺点以及优势?编程
超文本传输协议 ,咱们拆成三个部分,超文本、传输、协议。浏览器
咱们还要知道 HTTP 不是互联网,也不是编程语言,是一种协议。HTTP 一般跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通讯。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等。这些协议相互交织,构成了一个协议网,而 HTTP 则处于中心地位。安全
HTTP
是一个协议,不是开发语言,不是一个服务,也不是一种网络。只是一种协议、一种约定。那什么是协议呢?服务器
现实生活中也随处可见。好比毕业时签 ”三方协议“,入职工做 ”合同协议“,还有 咱们平时使用的软件 ”软件协议“。网络
其实一就是一种规范约定,约定双方须要遵照的东西,只有在这个规定下双方才能正确的执行对应动做和享有对应的权益。编程语言
若是只有你一我的,那你天然能够想干什么就干什么,想怎么玩就怎么玩,不会干涉其余人,其余人也不会干涉你,也就不须要所谓的“协议”。可是,一旦有了两个以上的参与者出现,为了保证最基本的顺畅交流,协议就天然而然地出现了。ide
协议意味着有多个参与者为了达成某个共同的目的而站在了一块儿,除了要无疑义地沟通交流以外,还必须明确地规定各方的“责、权、利”,约定该作什么不应作什么,先作什么后作什么,作错了怎么办,有没有补救措施等等。就像 JVM 虚拟机加载 class ,只有符合协议规定的东西 JVM 才能正确解析和加载。优化
划重点了老铁们:HTTP 是一个用在计算机世界里的协议。它使用计算机可以理解的语言确立了一种计算机之间交流通讯的规范,以及相关的各类控制和错误处理方式。编码
HTTP 是一个“传输协议”,所谓的“传输”(Transfer)其实很好理解,就是把一堆东西从 A 点搬到 B 点,或者从 B 点搬到 A 点,即“A<===>B”。
HTTP 协议是一个“双向协议”。
也就是说,有两个最基本的参与者 A 和 B,从 A 开始到 B 结束,数据在 A 和 B 之间双向而不是单向流动。一般咱们把先发起传输动做的 A 叫作请求方,把后接到传输的 B 叫作应答方或者响应方。
双方约定使用 HTTP 协议来通讯,浏览器把一些数据发送给服务器,服务器再把数据返回给浏览器。
数据虽然是在 A 和 B 之间传输,但并无限制只有 A 和 B 这两个角色,容许中间有“中转”或者“接力”。
这样,传输方式就从“A<===>B”,变成了“A<=>X<=>Y<=>Z<=>B”,A 到 B 的传输过程当中能够存在任意多个“中间人”,而这些中间人也都听从 HTTP 协议,只要不打扰基本的数据传输,就能够添加任意的额外功能,例如安全认证、数据压缩、编码转换等等,优化整个传输过程。
因此 HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。
所谓 “文本”(Text),就表示 HTTP 传输的不是 TCP/UDP 这些底层协议里被切分的杂乱无章的二进制包(datagram),而是完整的、有意义的数据,能够被浏览器、服务器这样的上层应用程序处理。
在互联网早期,“文本” 的确知识简单的文字,可是如今包含着 图片、视频、音频、压缩包。
从面含义理解:超文本,就是超越了普通文本,也就是 图片、视频、音频、压缩包等混合体,最关键的是含有“超连接”,可以从一个“超文本”跳跃到另外一个“超文本”,造成复杂的非线性、网状的结构关系。
咱们最熟悉的就应该是 HTML 了,它自己只是纯文字文件,但内部用不少标签订义了对图片、音频、视频等的连接,再通过浏览器的解释,呈如今咱们面前的就是一个含有多种视听信息的页面。
OK,通过了对 HTTP 里这三个名词的详细解释,下次当你再面对面试官时,就能够给出比“超文本传输协议”这七个字更准确更有技术含量的答案:“HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范”。
以下图所示,HTTP 涉及的知识点。左边的部分是与 HTTP 有关系的各类协议,比较偏向于理论;而右边的部分是与 HTTP 有关系的各类应用技术,偏向于实际应用。