简单来说,HTTP协议就是客户端和服务器交互的一种通迅的格式。
前言
在大学时就一直听闻HTTP和HTTPS的大名。校招面试时也被人问到过,现场没有回答上来(我很菜.jpg)。事后回去补了知识也没有形成系统的理解。
这不今天从公众号推送的文章入坑。对此记录一下。
先从故事入手 一个故事讲完https
HTTP
HTTP是HyperText Transfer Protocol的缩写,中文翻译为超文本传输协议。他是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
说的简单点,其实HTTP协议主要就是用来进行客户端和服务器之间进行通信的标准协议。HTTP主要规定了客户端如何与服务器建立链接、客户端如何从服务器请求数据、服务器如何响应请求,以及最后连接如何关闭。
是不是很懵逼,我也是这样的。
话不多说,直接上干货。漫话:如何给女朋友解释什么是HTTP。 前提是得有个女朋友,哈哈,开玩笑的。
HTTP协议的迭代
HTTP协议主要的版本有3个,分别是HTTP/1.0、HTTP/1.1和HTTP/2。
PS: 据国际互联网工程任务组(The Internet Engineering Task Force,简称 IETF )消息,HTTP-over-QUIC 实验性协议将被重命名为 HTTP/3,并有望成为 HTTP 协议的第三个正式版本。
HTTPS
HTTPS是Hypertext Transfer Protocol Secure的缩写,翻译为超文本传输安全协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。PS: 现在都用TLS协议了
先明确一点:HTTP和HTTPS是两个不同的协议。
HTTP的URL是由“http://”起始与默认使用端口80,而HTTPS的URL则是由“https://”起始与默认使用端口443。
什么对称加密,非对称加密。数字证书和 CA 认证之前被搞得头晕眼花的。
基础:
- 对称加密
- 加密和解密都是用同一个密钥
- 非对称加密
- 加密用公开的密钥,解密用私钥
- 私钥只有自己知道,公开的密钥大家都知道
- 数字签名
- 验证传输的内容是对方发送的数据
- 发送的数据没有被篡改过
- 数字证书(Certificate Authority)简称CA
- 认证机构证明是真实的服务器发送的数据。
数字签名不懂的可以阅读阮一峰老师的博文数字签名是什么?
HTTPS采用的是混合方式加密。
- 用户向web服务器发起一个安全连接的请求
- 服务器返回经过CA认证的数字证书,证书里面包含了服务器的公钥,认证机构对服务器公钥的数字签名,服务器的基本信息。
- 用户拿到数字证书,用自己浏览器内置的”证书管理器”,查看解开数字证书的公钥是否存在。不存在,说明证书来源可疑。
- 用户用CA的公钥对证书中的数字签名解密,得到哈希值,对证书中的服务器公钥进行哈希值计算,两个哈希值对比,如果相同,则证书合法,得到正确的服务器公钥。
- 用户用服务器的公钥加密一个对称加密算法的密钥(即随机数),同时Hash算法使用该随机数对该消息进行哈希值计算。消息与哈希值一同与传给web服务器。
- 因为只有服务器有私钥可以解密,所以不用担心中间人拦截这个加密的密钥
- 服务器拿到这个加密的密钥,用私钥解密获取密钥(即随机数),使用随机数和Hash算法对该消息加密。验证的到的校验值是否与客户端发来的一致。如果一致则说明消息未被篡改,可以信任。
- 最后再使用对称加密算法,和用户完成接下来的网络通信。
吐槽
自己压根也写不出来。把看到的博客记录下来,用于回看。
参考链接