HTTP 简介
HTTP(HyperText Transfer Protocol),又称为超文本传输协议。
1898 年,Tim Berners-Lee 在 CERN(欧洲核子研究组织)提出了一种能让远隔两地的研究者们共享知识的设想,也就是后来的万维网。HTTP 也由此开始发展。
TCP/IP 协议族(TCP/IP Protocols)
简介
计算机和网络之间要实现信息传输,双方就要约定好通信的标准和方法。比如说怎么发起/结束通信,由那一边先发起,使用什么方法,什么语言等等。而这些为通信而制定的规则,我们称为协议(protocol)。TCP/IP 协议族(TCP/IP Protocol Suite,或 TCP/IP Protocols)则是这些网络传输协议家族的统称,这是因为协议族中的两个核心写于 TCP 和 IP,为该家族在最早通过的标准。
分层管理
TCP/IP 协议在一定程度上参考了 OSI 模型(Open System Interconnection Model)的体系结构。OSI 模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在 TCP/IP 协议中,它们被简化为了四个层次,我们叫它 TCP/IP 模型,它也被看做简化的 OSI 模型。而 HTTP 协议就是位于应用层的一种协议。
OSI 层号 | OSC 层次名 | TCP/IP 层号 | TCP/IP 层次名 | 封装单元 | TCP/IP 协议 |
---|---|---|---|---|---|
7 | 应用层(Application Layer) | 4 | 应用层(Application Layer) | 数据 | HTTP, FTP, TFTP, DNS, Telent, IMAP, SMTP |
6 | 表示层(Presentation Layer) | ^^ | 数据 | ^^ | |
5 | 会话层(Session Layer) | ^^ | 数据 | ^^ | |
4 | 传输层(Transport Layer) | 3 | 传输层(Transport Layer) | 报文段 | TCP, UDP, RTP, SCTP |
3 | 网络层(Network Layer) | 2 | 互联网层(Internet Layer) | 数据包 | IP |
2 | 数据链路层 (Data Link Layer) | 1 | 网络接口层(Network Access Layer) | 帧 | |
1 | 物理层(Physical Layer) | ^^ | 比特 |
HTTP 版本历史
HTTP/0.9
HTTP 于 1990 年问世,那时候 HTTP 并没有被做完正式的标准被建立,因此被称为 HTTP/0.9。
HTTP/1.0
1996 年的 5 月,HTTP 正式作为标准被公布。这是第一个在通讯中指定版本号的 HTTP 协议版本。
HTTP/1.1
HTTP/1.1 于 1997 年 1 月公布,弥补了之前版本的很多不足。
HTTP/1.1 相较于 HTTP/1.0 协议的区别主要体现在:
- 缓存处理
- 带宽优化及网络连接的使用
- 错误通知的管理
- 消息在网络中的发送
- 互联网地址的维护
- 安全性及完整性
HTTP/2
于 2015 年 5 月作为互联网标准正式发布, 是目前的主流版本(截至到写这篇文章的 2021 年 11 月)。
HTTP/3
HTTP/3 是即将到来的第三个主要版本的 HTTP 协议,和之前的 1.1 和 2 不同,在 HTTP/3 中,将弃用 TCP 协议,改为使用基于 UDP 协议的 QUIC 协议实现。
HTTP 缺点
- HTTP 本身不具备加密功能,导致通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
参考:《图解 HTTP》
HTTPS
HTTPS(HTTP Secure) 也叫“超文本传输安全协议”,但它不是应用层的一种新协议,而是经由 HTTP 进行通讯,但是在 HTTP 通信接口部分用 SSL/TLS 协议代替。简而言之,HTTPS 是在 HTTP 的基础上,加了 SSL/TSL 协议这层外壳, 也拥有了身份验证,加密,证书和完整性保护这些功能。
SSL/TSL 简介
什么是 SSL
SSL(Secure Sockets Layer) 是由网景公司(Netscape)设计的主要用于 WEB 的安全传输协议。它的基础算法是网景公司的首席科学家 Taher Elgamal 编写,他也由此被称为“SSL 之父”。
SSL 协议在 1999 年 TLS 1.0 发布时就已被弃用,但仍然经常将这些相关技术称为“SSL”或“SSL/TLS”。
什么是 TSL
TSL(Transport Layer Security), 称为传输层安全协议,它是 SSL 的后继者。IETF(Internet Engineering Task Force)将 SSL 标准化,并命名为 TLS。
加密方式
公开密钥加密
公开密钥密码学(Public-key encryption),也称非对称式密码学(Asymmetric encryption)。
公开密码学它需要两个密钥,一个是公开密钥,另一个是私有密钥;公钥用作加密,私钥则用作解密。使用公钥把明文加密后所得的密文,只能用相对应的私钥才能解密并得到原本的明文。最初用来加密的公钥不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密。
加密过程:
我们可以通过 d(c(x))=x 来解释
- 小明和小红互相不认识,也没有安全可靠的沟通渠道,但是小明现在要通过不安全的互联网向小红发信息。
- 小明写好信息,这时候我们称这个未加密的信息为
明文 x
。 - 小红通过
密码学安全伪随机数生成器
产生一对密钥,其中一个作为公钥 c
,另一个作为私钥 d
。 - 小红可以通过任何方法发送
公钥 c
给小明。这个公钥 c
谁看到都没问题。 - 小明通过
公钥 c
把明文 x
加密,得到密文 c(x)
。 - 小明可以通过任何方法把
密文 c(x)
发送给小红,这个密文,被小刚看到也没关系。 - 小红收到
密文 c(x)
,他用自己的私钥 d
进行解密 d(c(x)),得到明文 x
。 - 如果小刚截取了小明的
密文 c(x)
,但是由于小刚没有私钥 d
,因此小刚无法获得明文 x
,因为加密和解密的密钥是分开的。 - 如果小明把自己写的信息(
明文 x
)弄丢了,在没有得到私钥 d
的情况下,小明和小刚一样,都没法获得重新得到明文x
。
对称密钥加密
对称密钥加密(Symmetric-key encryption),它又称为共享密钥加密(asymmetric-key encryption)。它的加密和解密都使用相同的密钥。与公开密钥加密相比,它的速度要快很对,但是要求双方获取相同的密钥是对称密钥加密的主要缺点之一,因为你无法保证能把密钥安全发送给对方。
HTTPS 采用的是混合加密机制
SSL/TLS 使用非对称和对称加密来保护传输中的数据的机密性和完整性。非对称加密用于在客户端和服务器之间建立安全会话,对称加密用于在安全会话中交换数据。这样把两种加密方式的优点结合起来。实现了我们现在用的 HTTPS。
SSL 证书
SSL 证书(也称 TLS 或者 SSL/TLS 证书)是一种数字证书,它就是遵守 SSL 协议,由受信任的数字证书颁发机构 CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
- 如果 Web 服务器的 SSL 证书是由一个公开受信任的证书颁发机构(CA)签署的,那么来自服务器的数字签名内容将被最终用户的 web 浏览器和操作系统视为可信的。
- 如果你自己使用 OpenSSL 开源程序,自己构建一套私人的认证机构,从而给自己颁发服务器证书。但是这个服务器证书在互联网上不可以作为证书使用,没有什么用,浏览器访问该服务器时,会显示“无法确认连接安全性”或“该网站的安全证书存在问题”等警告消息。
我们可以通过点击url头部的🔒的标志来查看证书。
使用场景
HTTPS 和 HTTP 的主要区别就是安全和速度。在安全上,HTTPS 优于 HTTP。但是因为加密和解密的过程需要进行大量运算,严重降低机器性能。相关测试数据表明使用 HTTPS 协议传输数据的工作效率只有使用 HTTP 协议传输的十分之一。
安全: HTTPS>HTTP
速度: HTTPS<HTTP
- 如果你的网站不是商业性质的,或者你不需要考虑网站访问者提交的敏感信息,比如说密码,身份信息等等。你可以考虑只用 HTTP
- HTTPS 除了在安全上有绝对优势,如果你的网站需要做 SEO,也请用 HTTPS。很多搜索引擎会忽略甚至屏蔽 HTTP 的网站。