天天看点

详谈HTTP协议和HTTPS以及HTTP2.0

前言

详谈之前,先讲一下本文可能有点长,但是很通俗。学习嘛,无非就是一个耐心,其实生活亦是如此。。。。

1、HTTP的发展历史

1、1989年HTTP 协议始于三十年前蒂姆·伯纳斯 - 李的一篇论文;URI:即统一资源标识符,作为互联网上资源的唯一身份;HTML:即超文本标记语言,描述超文本文档;HTTP:即超文本传输协议,用来传输超文本。这哥们算是写了第一行web代码。

2、HTTP/0.9 是个简单的文本协议,只能获取文本资源;

3、1996年NCSA(美国国家超级计算应用中心)HTTP/1.0 确立了大部分现在使用的技术,但它不是正式标准;

4、1999年推出HTTP/1.1 ,也是目前互联网上使用最广泛的协议,功能也非常完善;

5、2015年HTTP/2 基于 Google 的 SPDY 协议,注重性能改善,但还未普及;

6、2018年HTTP/3 基于 Google 的 QUIC 协议,是将来的发展方向。

详谈HTTP协议和HTTPS以及HTTP2.0
这里只记录了发展的几件大事,其中里面有很多有趣的故事,
 比如网景公司跟微软的浏览器大战推动了http1.0出现,然后火狐诞生了,腾讯,网易,搜狐等等互联网公司也如雨后春笋一般
 这其实也为后来的网络发展奠定了基础,Google也是通过浏览器推广推动了http2.0
           

2、HTTP是什么?HTTP又不是什么?

HTTP 就是超文本传输协议,也就是 HyperText Transfer Protocol,估计这是一个万金油的答案。如果面试这么回答面试官,肯定会被一通追问

详谈HTTP协议和HTTPS以及HTTP2.0
BOSS立马追问
你是怎么理解 HTTP 字面上的“超文本”和“传输协议”的?
能否谈一下你对 HTTP 的认识?越多越好。
HTTP 有什么特点?有什么优点和缺点?
HTTP 下层都有哪些协议?是如何工作的?
……

是不是这个时候就有点懵?

其实协议是对参与者的一种行为约定和规范,协议意味着有多个参与者为了达成某个共同的目的而站在了一起,除了要无疑义地沟通交流之外,还必须明确地规定各方的“责、权、利”,约定该做什么不该做什么,先做什么后做什么,做错了怎么办,有没有补救措施等等。

其次HTTP 是一个“传输协议”,所谓的“传输”(Transfer)其实很好理解,就是把一堆东西从 A 点搬到 B 点,或者从 B 点搬到 A 点,即“A<===>B”。

除了“协议”和“传输”,现在,我们终于到 HTTP 字面里的第三部分:“超文本”。

所谓“超文本”,就是“超越了普通文本的文本”,它是文字、图片、音频和视频等的混合体,最关键的是含有“超链接”,能够从一个“超文本”跳跃到另一个“超文本”,形成复杂的非线性、网状的结构关系。不像TCP/UDP这些底层协议里被切分的杂乱无章的二进制包(010100101010010101)。

简单点说就是:这就是一个合同(协议),一切都按合同办事(规范),办事是双方的,你给我办事,我也给你办事(传输),办的都是人事,都看的懂(超文本)

HTTP不是什么?

HTTP 不是互联网。

HTTP 不是操作系统。

HTTP 不是编程语言。

HTTP 不是 HTML。

HTTP 不是一个孤立的协议。

HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等

3、与HTTP相关的各种概念

1、CDN 浏览器和服务器是 HTTP 协议的两个端点,那么,在这两者之间还有别的什么东西吗?当然有了,浏览器通常不会直接连到服务器,中间会经过“重重关卡”,其中的一个重要角色就叫做 CDN。它应用了 HTTP 协议里的缓存和代理技术,代替源站响应客户端的请求,简单来说,它可以缓存源站的数据,让浏览器的请求不用“千里迢迢”地到达源站服务器,直接在“半路”就可以获取响应。如果 CDN 的调度算法很优秀,更可以找到离用户最近的节点,大幅度缩短响应时间。简单说就是,你想吃饭,外卖小哥直接把饭送到你家,省得你去卖菜买米还要自己烧。

2、TCP/IP TCP/IP 协议是目前网络世界“事实上”的标准通信协议,

这个协议栈有四层,最上层是“应用层”,最下层是“链接层”,TCP 和 IP 则在中间:TCP 属于“传输层”,IP 属于“网际层”。

IP 协议是“Internet Protocol”的缩写,主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。IP 协议使用“IP 地址”的概念来定位互联网上的每一台计算机。可以对比一下现实中的电话系统,你拿着的手机相当于互联网上的计算机,而要打电话就必须接入电话网,由通信公司给你分配一个号码,这个号码就相当于 IP 地址。

TCP 协议是“Transmission Control Protocol”的缩写,意思是“传输控制协议”,它位于 IP 协议之上,基于 IP 协议提供可靠的、字节流形式的通信,是 HTTP 协议得以实现的基础,互联网上的 HTTP 协议就运行在了 TCP/IP 上,HTTP 也就可以更准确地称为“HTTP over TCP/IP”。

3、DNS 上面说的IP实际结构可能是192.168.0.1这样一串数字,可实际应用中,谁愿意去记住你这一串数字,大家更愿意记住www.taobao.com,这样一个域名,但想要使用 TCP/IP 协议来通信仍然要使用 IP 地址,所以需要把域名做一个转换,“映射”到它的真实 IP,这就是所谓的“域名解析”。

不要急,文章下面的会详细介绍域名解析,罒ω罒。

4、URI/URL 就是我们俗称的网址,其实URL是URI的一个子集,好比URI是淘宝,URL就是www.taobao.com,实际混着用也没啥关系。

5、HTTPS 我们知道HTTP是明文传输的,就是你能看见所有的传输信息,当然这样就不安全。所以我们可以给他加密,加密协议是SSL/TLS,关于SSL/TLS文章下面的也会详细介绍。注意看,现在你浏览的CSDN浏览器上面最左边有一个🔐,那就代表加密。

4、七层协议和四层协议

所谓的4层和7层只不过是两个不同的概念而已。

我们通常说的四层协议,就是TCP/IP 网络分层模型

详谈HTTP协议和HTTPS以及HTTP2.0

第一层叫“链接层”,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,你可以把你家路由器背面那个说明看一下,上面就有一个Mac地址,我们用的钉钉WiFi打卡,实际就是识别WiFi的Mac地址是否符合要求。实现异地打卡实际就是改Mac地址。

第二层叫“网际层” ,这一层就是IP协议,IP协议就是上面识别你的地址,文章上面讲过了,就不再啰嗦了。

第三层叫“传输层” tcp协议,就是一个传输过程,你打电话里面说的话,你上网发的信息内容都是基于这个传输的。

第四层叫“应用层” 最上一层就是HTTP协议,内容得遵守共同的协议才能被读懂,HTTP就负责干这事。

举一个通俗的例子,就是你寄好吃的给我,Mac地址就代表你们小区地址,IP就代表你家门牌号,tcp就是快递员,HTTP就是这个包裹这个好吃的快递包裹

七层协议,OSI 网络分层模型

详谈HTTP协议和HTTPS以及HTTP2.0

第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等;

第二层:数据链路层,它基本相当于 TCP/IP 的链接层;

第三层:网络层,相当于 TCP/IP 里的网际层;

第四层:传输层,相当于 TCP/IP 里的传输层;

第五层:会话层,维护网络中的连接状态,即保持会话和同步;

第六层:表示层,把数据转换为合适、可理解的语法和语义;

第七层:应用层,面向具体的应用传输数据

详谈HTTP协议和HTTPS以及HTTP2.0

还是上面那个例子,其实所谓的7层,就是4层的详细版,7层就是物理层就代表你家附近最近的一个快递站点,后面回话层,表示层和应用层就是教你怎么拿快递,拆快递,使用快递。

其实四层足以理解这个过程

详谈HTTP协议和HTTPS以及HTTP2.0

5、域名

前面我们讲到域名解析,只是知道这个是DNS把一串字母转成一串数字,这个过程是怎样的呢?

其实域名解析过程片面讲,还是很简单就是,我拿www.apple.com举例子

.com 是根域名服务器,

apple.com是顶级域名服务器,

www.apple.com是权威域名服务器.

详谈HTTP协议和HTTPS以及HTTP2.0

理论上访问www.apple.com是先去.com->apple.com->www.apple.com

最后转成最终ip

但是如果每个都这么找,那不得慢死么,不用怕,这里面每一层都有”缓存“

首先回去我的本机去找,比如我用的Mac里是“/etc/hosts”,在 Windows 里是“C:\WINDOWS\system32\drivers\etc\hosts”

然后还有系统缓存,然后各级代理缓存和DNS服务器,比如我们买的阿里云费武器,里面就已经配好域名和ip。

6、三次握手和四次挥手

详谈HTTP协议和HTTPS以及HTTP2.0

三次握手和四次挥手:

浏览器在给服,务器传输数据之前,有三次握手,握手成功之后,才可以传输数据

1、浏览器需要先发送SYN码,客户端请求和服务器建立连接;

2、服务器接收到SYN码,再发送给客户端SYN+ACK码,我可以建立连接;

3、客户端接收到ACK码,验证这个ACK是否正确,如果正确则客户端和服务端则建立起数据连接;双方的数据发送通道都将开启;

打个比方吧,三握手就是两个人打电话,拨号就是第一次握手,然后你说”hello“,就是第二次握手,对面也说”hello“,就是第三次握手

四次挥手:

1、当客户端无数据要传输了,会发送FIN码告诉服务器,我发送完毕了;

2、当服务端接收完毕后,告诉客户端ACK码,告诉客户端你可以把数据通道关闭了;

3、当服务器发送完毕之后,也会发送FIN码,告诉浏览器,数据发送完毕;

4、当客户端接收完毕 之后,同样发送ACK码,告诉服务器,数据接收完毕,你可以关闭;

而四次挥手更是有”礼貌“

当你玩英雄联盟开黑,你说”下了“(第一次),你的兄弟得知这个悲伤的消息,回了一个"嗯"(第二次),然后也说了一个"那我也下了"(第三次),你也说“嗯”(第四次)

7、HTTP报文

HTTP协议核心是什么?没错,就是报文。

HTTP 协议的请求报文和响应报文的结构基本相同,

由三大部分组成:

起始行,描述请求或响应的基本信息;

头部字段集合header,使用 key-value 形式更详细地说明报文;

消息正文body,实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。

在HTTP/1.1里面规定唯一必须要出现的字段就是host,其实这个也很好理解,你寄快递,别的可以不填,起码地址得有吧

然后其他的就是一些状态码(301 404 500…),请求方式(GET POST DELETE PUT)等等,也没啥好说的。

8、HTTP特点

HTTP有啥特点呢,有没有什么缺点呢?总结了下面几点,至于优点缺点你不评价。

1、灵活可扩展,就比如请求头除了host,你可以任意扩展。

2、可靠传输,基于 TCP/IP

3、万能协议,像FTP协议只能上传文件,SMTP只能发邮件,但这些貌似HTTP都可以做,在线上传功能,在线QQ邮箱不要太常见

4、无状态,第一次请求和第二次请求毫无关系,比如一个系统每次都要判断登录状态(cookie完美解决了这个问题)

5、请求应答模式,客户端每次请求,服务端都被动回答

6、明文传输,安全不够好,但是简单明了,开发调试方便

7、性能,不算好,但是现在目前大家网络带宽和硬件都不差

8、跨语言、跨平台,java php go等等没有谁说不支持HTTP吧

9、HTTPS

………后续补充…………

10、SSL和TLS

………后续补充…………

11、HTTP2内核过程

①由于HTTP2连接建立在TCP,TLS之上,TLS 握手成功之后,客户端必须要发送一个“连接前言”,用来确认建立 HTTP/2 连接。

连接前言
PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n
           

②和HTTP1.1请求一样,HTTP2也有header和body,但是会HPACK压缩,并且少了那些HTTP起始行里面的URL,状态码等等。

③二进制帧,帧类型分成数据帧和控制帧两类,并且是可以扩展的, Google 的 gRPC留就是自己定义的新的帧类型

详谈HTTP协议和HTTPS以及HTTP2.0

12、HTTP2特点

1、完全兼容HTTP1.1,方法、URI、状态码、头字段等概念都保留不变

2、头部压缩,开发了专门的“HPACK”算法,在客户端和服务器两端建立“字典”,用索引号表示重复的字符串

3、二进制格式,原来的“Header+Body”的消息“打散”为数个小片的二进制“帧”(Frame),用“HEADERS”帧存放头数据、“DATA”帧存放实体数据,数据分帧后“Header+Body”的报文结构就完全消失了,协议看到的只是一个个的“碎片”。

4、虚拟流

详谈HTTP协议和HTTPS以及HTTP2.0

5、服务器推送,改变了传统的“请求 - 应答”工作模式,新建“流”主动向客户端发送消息。

小结:http、https、http2协议栈区别(大同小异)

详谈HTTP协议和HTTPS以及HTTP2.0

继续阅读