大家好,这里是前端航海日志。在日常开发中,HTTP 和 HTTPS 是每个开发者都绕不开的话题。无论是日常访问网页还是开发网络应用,HTTP 协议都扮演着关键角色,而 HTTPS 则在安全性方面进一步提升,为我们的网络通信保驾护航。本文将从 HTTP 的基础入手,逐步讲解其特点、工作原理及不足之处,并深入探讨 HTTPS 是如何通过加密和认证机制解决这些问题,最终帮助大家构建对网络协议的全面理解。
一、HTTP
HTTP(HyperText Transfer Protocal)超文本传输协议,它通常运行在 TCP 之上,通过浏览器和服务器进行数据交互,进行超文本(文本、图片、视频等)传输的规定。也就是说,HTTP 协议规定了超文本传输所要遵守的规则。
Http特点:
- 仅支持(客户端/服务端)模式。意味着该请求只能通过客户端发起,服务端响应。
- 简单快速、灵活。
- HTTP 协议是无状态的。这意味着客户端和服务端之间无法知晓当前对方的状态信息,
HTTP请求本身是不带有任何状态存储的。但实际情况下,客户端和服务端必然需要状态的认证和交互,所以就引入了Cookie、Session, 用于存储当前浏览器的一些状态信息,每次通过独立的HTTP请求进行收发,从而解决这个问题。 - HTTP 请求互相独立。HTTP 互相之间都是一个独立的个体请求,在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先是响应 HTML 页面,然后浏览器收到响应之后发现页面还引用了其他的资源,例如,CSS,JS 文件,图片等等,还会自动发送 HTTP 请求获取这些需要的资源。
- HTTP 协议基于 TCP 协议。HTTP 协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节,底层是基于 TCP 实现的。现在使用的版本当中是默认持久连接的,也就是多次 HTTP 请求使用一个 TCP 连接。
注意:
HTTP请求和TCP连接是不一样的,HTTP 是在 TCP 连接建立的基础上而发起的传输请求,在同一个 TCP 连接通道下,可以发送多个 HTTP 请求,举个例子的话就是高速公路和车子的关系。
二、HTTPS
超文本传输安全协议(Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。
HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
TLS/SSL全称安全传输层协议Transport Layer Security, 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,所以使用HTTPS基本上不需要对HTTP页面进行太多的改造。
HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。HTTPS主要作用是:
- 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全。
- 对网站服务器进行真实身份认证。
简单的总结就是:
HTTPS=HTTP+加密+认证+完整性保护。
TLS/SSL 工作原理
HTTPS协议的主要功能基本都依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密。
其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
散列函数 Hash
常见的有 MD5、SHA1、SHA256,该类函数特点是函数单向不可逆、对输入非常敏感、输出长度固定,针对数据的任何修改都会改变散列函数的结果,用于防止信息篡改并验证数据的完整性;
在信息传输过程中,散列函数不能单独实现信息防篡改,因为明文传输,中间人可以修改信息之后重新计算信息摘要,因此需要对传输的信息以及信息摘要进行加密;
对称加密
常见的有AES-CBC、DES、3DES、AES-GCM等,相同的密钥可以用于信息的加密和解密,掌握密钥才能获取信息,能够防止信息窃听,通信方式是 1 对 1;
对称加密的优势是信息传输 1 对 1,需要共享相同的密码,密码的安全是保证信息安全的基础,服务器和 N 个客户端通信,需要维持 N 个密码记录,且缺少修改密码的机制;
非对称加密
即常见的 RSA 算法,还包括 ECC、DH 等算法,算法特点是,密钥成对出现,一般称为公钥(公开)和私钥(保密),公钥加密的信息只能私钥解开,私钥加密的信息只能公钥解开。因此掌握公钥的不同客户端之间不能互相解密信息,只能和掌握私钥的服务器进行加密通信,服务器可以实现 1 对多的通信,客户端也可以用来验证掌握私钥的服务器身份。
非对称加密的特点是信息传输 1 对多,服务器只需要维持一个私钥就能够和多个客户端进行加密通信,但服务器发出的信息能够被所有的客户端解密,且该算法的计算复杂,加密速度慢。
三、状态码
HTTP 状态码是服务器端返回给客户端的响应状态码,根据(HTTP)状态码我们就能知道服务器端想要给客户端表达的具体含义,比如 200 就表示请求访问成功,500 就表示服务器端程序出错等。 HTTP 状态码可分为 5 大类:
- 1XX:消息状态码。
- 2XX:成功状态码。
- 3XX:重定向状态码。
- 4XX:客户端错误状态码。
- 5XX:服务端错误状态码。
感谢大家的支持!如果这篇文章帮到你,别忘了点赞 ❤、收藏⭐,让我们在前端的航海路上继续扬帆起航!