一文了解 HTTP

诞生时刻

1989年,任职于欧洲核子研究中心(CERN)的蒂姆·伯纳斯 - 李(Tim Berners-Lee)发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。基于这个构想确立了三项技术:

  • URI: 统一资源标识符,作为互联网资源的唯一身份
  • HTML:超文本标记语言,描述超文本文档。
  • HTTP:超文本传输协议,用来作为文档传输的协议。

蒂姆把这个系统称为 “万维网” (World Wide Web),也就是我们现在所熟知的 Web 。

HTTP 于 1990年问世。在90年代初期,网络上绝大多数的资源都是纯文本,那时的 HTTP 并没有作为正式的标准被建立。0.9版本其结构比较简单,为了便于服务器和客户端处理,采用纯文本格式。

HTTP /1.0

1993 年,NCSA(美国国家超级计算应用中心)开发出了 Mosaic,是第一个可以图文混排的浏览器,随后又在 1995 年开发出了服务器软件 Apache,简化了 HTTP 服务器的搭建工作。

这写新技术促使更多人开始使用互联网,并对 HTTP 提出优化改进意见,不断促进着 HTTP 的发展。

在这些基础上, 1996 年的 5 月,HTTP 正式作为标准被公布,命名为 HTTTP/1.0。相对于 0.9 版本增加了以下内容:

  • 增加了 HEAD、POST 等新方法
  • 增加了响应状态码
  • 引入了协议版本号概念
  • 引入了 HTTP Header(头部) 的概念
  • 传输的数据不再局限于文本

HTTP 1.1

1995 年,网景的 Netscape Navigator 和微软的 Internet Explorer 开始了著名的“浏览器大战”,最终微软的 IE 取得了胜利。浏览器之间的相互竞争极大的推动了 Web 的发展,由此 HTTP 也跟着有了进一步的演进,在 1997 年 1 月公布了 HTTP/1.1, 并在 1999年发布了新的修订版 RFC2616,成为了当前版本的最新版本。

该版本基于 HTTP/1.0做了很多新的富有成效的改动,其主要变更点如下:

  • 增加了 PUT 、DELETE 等新的方法
  • 增加了缓存管理和控制
  • 明确了连接管理,允许持久连接
  • 允许响应数据分块,利于大文件的传输
  • 强制要求 Host 头,让互联网主机托管成为可能

HTTP/1.1 的推出,促进了互联网的快速发展,在现在依旧是主流的HTTP协议版本。

HTTP/2

在 HTTP/1.1 发布之后,互联网出现了爆发式增长,由此也出现了对 HTTP 不满的一些意见,例如 连接慢,无法跟上互联网发展的需求,Google终于看不下去了,打算撬动 HTTP 协议的改革,其推出了 SPDY协议,并在 Chrome上应用,Chrome 在全球占有率达到 60%,Google 借势推动了 互联网标准化组织 以 SPDY 为基础了定制了新版本的 HTTP 协议,在 2015 年发布了 HTTP/2。

HTTP/2 充分考虑了互联网当前现状,做了如下改动:

  • 二进制协议,不再是纯文本
  • 可发起多个请求
  • 使用专门算法压缩头部,减少数据传输量
  • 允许服务器主动向客户端推送数据

虽然 HTTP/2 已经发布了好几年了,但因 HTTP/1.1 太过经典和强势,目前其普及率还比较低,大多数网站还是用的 HTTP/1.1,例如百度:

image-20211213234448978

HTTP 是什么?

HTTP 就是超文本传输协议,也就是 HyperText Transfer Protocol

基本上你在网上各种教材和回答得到的都是这个答案,但是如果你没怎么细致的了解过 HTTP,可能这句话对你来说也是丈二和尚,摸不着头脑。那我们就来细致拆解分析下;

超文本传输协议,我们把它拆成三个部分来解读:超文本传输协议

协议。HTTP 它就是一个协议,协议就是对参与者的一种行为约定和规范,这里举个现实生活中的例子。例如,你在外面租房子的时候,会和房东签一个合同,公司入职的时候会签一个劳动合同,这些都是协议,双方要遵守协议约定的内容。

HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。

传输。 传输,其实按照字面意思理解起来非常简单,就是把一个东西从 A 传到 B,或者从 B 传到 A。HTTP 是一个 “双向协议”,也就意味着数据在 A、B之间是双向流动的。我们把发起传输的一方叫作请求方,接到传输的一方叫作响应方,例如你在浏览器访问视频网站,那么浏览器就是请求方,视频网站就是响应方。

总结下来 HTTP 传输的定义就是:

HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。

文本。 这表示 HTTP 传输的是完整的、有意义的数据,可以被浏览器、服务器这些应用程序处理。

在 HTTP 早期,只支持一些简单的字符文字,但随着 HTTP 不断的演进,现在已经能够支持图片、音频、视频,压缩包,这些对于 HTTP 来说都可以算作是 “文本”。

超文本,它是一个可以包含文字、图片、音频、视频等的混合体,并且很关键的一点是可以含有超链接,能够从一个超文本跳跃到另一个超文本,形成复杂的非线性、网状的结构关系。

超文本对于我们来说最熟悉的就是 HTML了,它本身只是一个纯文字文件,但是内部却用多种标签定义了图片、音频、视频等,通过浏览器的解析,就呈现出了一个丰富多彩的页面。

经过对 HTTP 三个名词的解析,那我们如果再对 HTTP做一个完整描述,就是:

HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

HTTP 有哪些特点

1. 是不保存状态的协议

HTTP 自身不对请求和响应之间的通信状态进行保存。每当有新的请求发送,就会有对应的新响应产生,协议本身不会对之前一切的请求和响应报文进行保留。这种做法可以更快处理大量事务,确保协议的可伸缩性。

2.请求URI 定位资源

HTTP 协议使用 URI 定位互联网上的资源。正是因为 URI 的特定功能,在互联网上任意位置的资源都能访问到。

说到 URI ,就不得不把 URL 拿出来进行对比,好多人对两者分不太清楚, 在《HTTP权威指南》一书中,对于URI的定义是:统一资源标识符;对于URL的定义是:统一资源定位符,URL 相当于 URI 的子集。

URI,统一资源标识符,标识就代表着是在某一规则下能把一个资源唯一性的标识出来,例如,一个人,他的唯一标识怎么去区分呢,用名字?名字会重复的,但是身份证可以,身份证不会重复,所以身份证就是一个 URI。

URL, 统一资源定位符,例如我要找一个具体的人,我知道了他是上海市/虹口区/xx路/xx小区/xx号xx室/张三,那么通过这个字符串我们就能标识出一个唯一的人,它也是起到了 URI 的作用,因此 URL 是 URI 的子集,URL 是以描述人的位置来唯一确定一个人的。也就是说 URL 是用定位的方式实现的 URI,所有的URL 都可以称之为 URI,但反过来是不行。

3. 使用方法下达命令

当发送请求报文时,我们通过一个方法的命令标识来指定请求的资源期望产生某种行为,下面列举了一些 HTTP/1.0 和 HTTP/1.1 支持的方法。

image-20211216221136724

通常我们用到的最多的方法就是 GET 和 POST。

4.可靠传输

因为 HTTP 协议是基于 TCP/IP 的,而 TCP 本身是一个 可靠 的传输协议,所以 HTTP 自然也就继承了这个特性,能够在请求方和应答方之间“可靠”地传输数据。

HTTP 并不能 100% 保证数据一定能够发送到另一端,在网络繁忙、连接质量差等恶劣的环境下,也有可能收发失败。 可靠 只是向使用者提供了一个 承诺 ,会在下层用多种手段 尽量 保证数据的完整送达。

坚持原创不易,关注我,持续输出完整 HTTP 知识点。
3T+技术学习视频资源,500+技术电子书,大量高效工具及网站,私信回复【资源】即可免费获取

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员蛋蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值