一、概述
1.1 HTTP/HTTPS协议介绍
-
英文/中文全称:
- HTTP:HyperText Transfer Protocol,超文本传输协议。
- HTTPS:HyperText Transfer Protocol Secure,超文本传输安全协议。
-
HTTP介绍:
- 是获取网络资源(HTML文件、文本、图片、视频、查询结果等)的通讯协议;
- 是在web上进行数据交换的基础,是一种 client-server 协议
- 是一个基于 TCP/IP 通信协议的可扩展协议
- 是应用层的协议
-
遵循模型:客户端-服务端模型
1.2 HTTP的发展史
参考:HTTP 的发展
-
HTTP0.9 - 单行协议
1989年,万维网发明。万维网在现有的 TCP 和 IP 协议基础上建立。版本号0.9是用来区分后来的版本。
HTTP0.9的请求和响应:
请求由单行指令构成,以唯一可用方法 GET 开头,其后跟目标资源的路径;
响应也只包含响应文档本身;
注意点:
- HTTP0.9的响应内容不包含HTTP头,
- 没有状态码或错误代码
-
HTTP1.0 - 构建可扩展性
在 1991-1995 年,浏览器和服务器迅速扩展内容使其用途更广,但是这些新扩展并没有被引入到标准中以促进协作工作,而仅仅作为一种尝试。
1996 年 11 月,文档 RFC 1945 定义了 HTTP/1.0,但它是狭义的,并不是官方标准。
新增的扩展:
- 协议版本信息现在会随着每个请求发送(
HTTP/1.0被追加到了GET行)。 - 状态码会在响应开始时发送,使浏览器能了解请求执行成功或失败,并相应调整行为(如更新或使用本地缓存)。
- 引入了 HTTP 标头的概念,无论是对于请求还是响应,允许传输元数据,使协议变得非常灵活,更具扩展性。
- 在新 HTTP 标头的帮助下,具备了传输除纯文本 HTML 文件以外其他类型文档的能力(凭借
Content-Type标头)。
- 协议版本信息现在会随着每个请求发送(
-
HTTP1.1 - 标准化的协议
1997 年初,HTTP1.1 标准发布。消除了大量歧义内容并引入了多项改进。
在 1997 年 1 月以 RFC 2068 文件发布。
改进点:
- 连接可以复用,节省了多次打开 TCP 连接加载网页文档资源的时间。
- 增加管线化技术,允许在第一个应答被完全发送之前就发送第二个请求,以降低通信延迟。
- 支持响应分块。
- 引入额外的缓存控制机制。
- 引入内容协商机制,包括语言、编码、类型等。并允许客户端和服务器之间约定以最合适的内容进行交换。
- 凭借
Host标头,能够使不同域名配置在同一个 IP 地址的服务器上。
-
HTTP2.0 - 为了更优异的表现
2015 年 5 月正式标准化。
HTTP2.0与HTTP1.1的不同:
- HTTP/2 是二进制协议而不是文本协议。不再可读,也不可无障碍的手动创建,改善的优化技术现在可被实施。
- 这是一个多路复用协议。并行的请求能在同一个链接中处理,移除了 HTTP/1.x 中顺序和阻塞的约束。
- 压缩了标头。因为标头在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
- 其允许服务器在客户端缓存中填充数据,通过一个叫服务器推送的机制来提前请求。
2016年里HTTP的新扩展:
- 对 Alt-Svc 的支持允许了给定资源的位置和资源鉴定,允许了更智能的 CDN 缓冲机制。
- 客户端提示(client hint) 的引入允许浏览器或者客户端来主动交流它的需求,或者是硬件约束的信息给服务端。
- 在 Cookie 头中引入安全相关的的前缀,现在帮助保证一个安全的 Cookie 没被更改过。
-
HTTP3.0 - 基于QUIC的HTTP
HTTP/3 有这与 HTTP 早期版本的相同语义,但在传输层部分使用 QUIC (en-US) 而不是 TCP
二、HTTP
2.1 HTTP的作用
是客户端浏览器与其它程序与Web服务器之间的应用层通信协议。
2.2 HTTP的工作原理
- HTTP协议工作于客户端-服务端架构之上。浏览器作为HTTP客户端通过URL向HTTP服务器即WEB服务器发送所有请求。
- WEB服务器有:Apache 服务器,IIS 服务器(Internet Information Services)等。
- Web 服务器根据接收到的请求后,向客户端发送响应信息。
- HTTP 默认端口号为 80,但是我们也可以改为 8080 或者其他端口。
HTTP协议通信流程:
2.3 HTTP的基本性质
-
HTTP是简约的
大体上,HTTP被涉及得简单且易读。报文能够被人读懂并理解,向开发者提供了更简单的测试方式,也对初学者降低了门槛。
-
HTTP是可扩展的
在HTTP1.0中引入的HTTP标头(header)让协议扩展变得非常容易。只要服务器客户端之间对新标头的语义经过简单协商,新功能就可以被加入进来
-
HTTP是无状态,但并非无会话
HTTP连接是无状态的,无状态的意思就是,在同一个连接中,两个执行成功的请求之间是没有关系的。
-
HTTP和网络连接
2.4 HTTP的特点
- 支持客户/服务器模式
- 简单快速:客户向服务器请求服务是,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由
Content-Type加以标记 - 无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
- 无状态:HTTP协议无法根据之前的状态进行本次的请求处理
三、HTTPS
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
3.1 HTTPS的作用
-
HTTPS的主要作用是在不安全的网络上创建一个安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人共计提供合理的防护。
-
HTTPS的信任基于预先安装在操作系统中的证书办法机构(CA)。
与一个网站之间的HTTP连接仅在这些情况下可被信任:
- 浏览器正确地实现了HTTPS且操作系统中安装了受信任的证书办法机构
- 证书颁发机构仅信任合法的网站
- 被访问的网站提供了一个有效饿证书,也就是说它是一个由操作系统信任的证书颁发机构签发的(大部分浏览器会对无效的证书发出警告)
- 该证书正确地验证了被访问的网站
- 此协议的加密层(SSL/TLS)能够有效地提供认证和高强度的加密
3.2 HTTPS的工作流程
- TCP 三次同步握手
- 客户端验证服务器数字证书
- DH算法协商对称加密算法的密钥、hash算法的密钥
- SSL安全加密隧道协商完成
- 网页加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改
四、HTTP与HTTPS的区别
-
数据传输:
- HTTP 明文传输,数据都是未加密的,安全性差;
- HTTPS (HTTP + SSL)数据传输过程是加密的,安全性好;
-
证书申请:
- HTTP 无需申请证书
- HTTPS 需要到 CA(Certificate Authority,数字证书认证机构)申请证书,一般免费证书较少,需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
-
响应速度:
- HTTP 较快。主要因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换3个包
- HTTPS 比HTTP慢。HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
-
端口:
- HTTP 的端口是 80
- HTTPS 的端口是 443
-
服务器资源:
- HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。