目录
[一、HTTP 是什么](#一、HTTP 是什么)
[二、HTTP 特点](#二、HTTP 特点)
[三、Cookie 和 Session](#三、Cookie 和 Session)
[四、HTTP 和 TCP 的关系](#四、HTTP 和 TCP 的关系)
[五、HTTP 的基本工作原理](#五、HTTP 的基本工作原理)
[发送 HTTP 请求](#发送 HTTP 请求)
[接收 HTTP 响应](#接收 HTTP 响应)
[六、HTTP/2 与 HTTP/1 区别](#六、HTTP/2 与 HTTP/1 区别)
[九、SSL/TLS 握手过程](#九、SSL/TLS 握手过程)
一、HTTP是什么
HTTP(Hypertext Transfer Protocol)是一种用于传输超文本数据的应用层协议。用于在客户端(用户)和服务器(网站)之间传输和交换信息,通常使用 TCP 协议。
二、HTTP 特点
HTTP 无状态(每次客户端发送的请求都被认为是从全新的客户端发出),如需记录状态(如实现登录和购物车等功能),需要使用 Cookie 和 Session
三、Cookie 和 Session
Cookie 是存储在客户端 (通常是浏览器)中的小型文本文件 ,用于存储少量的键值对数据,可以设置过期时间,在客户端保持持久性。
Session 是存储在服务器端 的数据结构 ,用于存储用户的会话状态信息。通常在用户关闭浏览器或一段时间不活动后过期 ,更安全。
四、HTTP 和 TCP 的关系
HTTP 是在 TCP 的基础上建立的。
TCP 是传输层协议,主要解决数据如何在网络中传输。
HTTP 是应用层协议,主要解决如何包装数据。
当浏览器需要从服务器获取网页数据的时候,会发出一次 HTTP 请求。HTTP 会通过 TCP 建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,HTTP 会立即将 TCP 连接断开,这个过程是很短的,所以 HTTP 连接是一种短连接,是一种无状态的连接。
五、HTTP 的基本工作原理
- 客户端发起请求:客户端(如 Web 浏览器)向服务器发送一个 HTTP 请求,请求某个特定的资源(如网页、图像、视频、文本等,资源通过 URL 进行定位)。
UR L结构:协议,主机(Host),路径(Path),查询参数(Query)
-
服务器响应请求:服务器接收到请求后,处理请求,并返回一个 HTTP 响应,包含请求的资源或者错误信息等。
-
连接关闭:一旦服务器发送完响应,连接就会关闭,除非客户端和服务器之间有其他的协议或机制保持连接保持活动状态(例如 HTTP 的持久连接)。
发送 HTTP 请求
发送 HTTP 请求的内容
请求方式 、路径与查询参数、HTTP 版本、Request Header 请求头、Request body 请求体
请求方式:
- GET 获取资源,无请求体
- POST 创建资源,有请求体
- PUT 更新资源,有请求体
- DELETE 删除资源,无请求体
接收 HTTP 响应
接收HTTP响应的内容
HTTP 版本、响应状态码、Response Header 响应头(包含额外的信息告诉客户端如何控制缓存和cookie)、Response body 响应体(从服务端返回的数据)
响应状态码
- 1xx 一般信息
- 2xx 成功响应
- 3xx 重定向
- 4xx 客户端错误
- 5xx 服务端错误
六、HTTP/2与HTTP/1区别
- 数据使用二进制传输
- 多路复用:建立连接后可一次性发送多个HTTP请求
- 压缩 HTTP Headers ,减少负载
- 支持 Server Push
七、HTTPS
HTTPS(Hypertext Transfer Protocol Secure)是 HTTP 协议的安全版本,用于在客户端和服务器之间安全地传输数据。
HTTPS 通过使用 SSL/TLS 协议对 HTTP 数据进行加密和认证,提供了数据的保密性和完整性,以及用户和服务器的身份验证。
HTTPS 的工作原理与 HTTP 类似,但具有以下额外的安全性特征:
-
加密传输:使得数据在传输过程中不易被窃取或篡改。即使有人截获了数据包,也无法直接读取其中的内容。
-
身份认证:确保客户端与服务器之间的通信是安全的。这防止了中间人攻击,确保客户端连接到的是预期的服务器,而不是恶意服务器。
-
数据完整性 :HTTPS 通过数字签名来保证数据的完整性,确保数据在传输过程中没有被篡改。如果数据在传输过程中被篡改,客户端和服务器之间的通信将被中断。
HTTPS 使用了公钥加密和私钥加密技术来实现安全通信。在 HTTPS 握手过程中,客户端和服务器之间会交换密钥,以建立安全的通信信道。
八、SSL/TLS
SSL(Secure Sockets Layer)是一种用于在计算机网络上实现安全通信的协议。它最初由网景公司开发,现在被其继任者 TLS(Transport Layer Security)所取代,但人们通常仍然使用 "SSL" 来指代TLS。
SSL/TLS 协议用于在客户端和服务器之间建立加密通道,以确保在传输过程中的数据安全性和完整性。
SSL/TLS 协议提供的安全特性:加密通信,身份验证,数据完整性。
SSL/TLS 协议是在传输层(Transport Layer)上实现的,因此它可以应用于各种传输协议上,如 HTTP、SMTP、IMAP 等。最常见的应用就是在 HTTP 上,即 HTTPS 协议。
SSL/TLS 握手过程是建立安全通信的关键步骤。在握手过程中,客户端和服务器交换加密算法、密钥和证书等信息,以协商安全参数并建立安全通道。
九、SSL/TLS 握手过程
当客户端连接到服务器时,SSL/TLS 握手过程发生:
- 客户端 Hello :客户端向服务器发送一条 ClientHello 消息,告诉服务器自己支持的加密方式和 SSL/TLS 版本。
- 服务器 Hello :服务器从客户端的消息中选择一个加密方式和 SSL/TLS 版本,并返回给客户端 ServerHello 消息。如果服务器有证书,它也会发送给客户端。
- 证书验证:客户端验证服务器的证书。
- 生成共享密钥 :客户端生成一个随机数 ClientRandom,用服务器的公钥加密,然后发送给服务器。
- 服务器回复 :服务器用自己的私钥解密 ClientRandom,并生成随机数 ServerRandom。然后,服务器使用客户端提供的加密算法和密钥,以及自己的随机数,生成一个共享密钥。
- 握手完成:服务器将生成的共享密钥和其他参数打包成一个消息,发送给客户端。客户端收到这个消息后,也生成一个共享密钥。
至此,SSL/TLS握手过程完成,双方可以使用共享密钥加密和解密通信数据了。
十、数字签名
数字签名是一种用于验证数据完整性和认证发送者身份的技术。它通过在数据上应用加密算法,生成一个唯一的标识符,这个标识符被称为数字签名。数字签名与数据绑定在一起,并且只有私钥持有者才能生成数字签名。
数字签名的工作原理涉及非对称加密算法,使用发送者的私钥对数据进行加密生成数字签名,然后接收者使用发送者的公钥对数字签名进行解密验证,从而确保数据的完整性和认证发送者身份。
数字签名的主要作用包括:
- 认证发送者身份:接收者可以使用发送者的公钥验证数字签名,确认数据确实来自特定的发送者。
- 保证数据完整性:任何对数据的篡改都会导致数字签名验证失败,因此数字签名可以保证数据的完整性,即数据在传输过程中没有被篡改。
- 防止抵赖:发送者无法否认自己对数据的数字签名,因为只有发送者的私钥才能生成对应的数字签名,其他人无法伪造。
十一、对称加密算法和非对称加密算法
对称加密算法,使用相同的密钥加密和解密。
非对称加密算法,公钥加密,私钥解密。
常见的非对称加密算法:
- RSA 算法:最早的非对称加密算法之一,基于大素数的因子分解难题。
- ECC 算法:椭圆曲线密码学是一种基于椭圆曲线离散对数难题的算法,具有较高的安全性和效率。
- DSA 算法:数字签名算法(DSA)是一种基于离散对数难题的算法,主要用于数字签名和认证。
十二、其他网络协议
-
FTP(File Transfer Protocol):用于在网络上传输文件的协议,允许用户从一个计算机向另一个计算机发送和接收文件。
-
SMTP(Simple Mail Transfer Protocol):用于在网络上发送电子邮件的协议,负责将邮件从发送者的邮件服务器传输到接收者的邮件服务器。
-
POP3(Post Office Protocol version 3):用于在网络上接收电子邮件的协议,允许用户将邮件下载到本地计算机,并默认删除服务器上的邮件。
-
IMAP(Internet Message Access Protocol):用于在网络上接收电子邮件的协议,与 POP3 类似,但可以在邮件服务器上管理邮件,如创建文件夹、标记邮件、删除邮件等操作,这些操作会在所有设备上同步。
-
DNS(Domain Name System):用于将域名解析为 IP 地址的协议。
-
SSH(Secure Shell):用于在网络上安全地远程登录到另一个计算机,并执行命令和操作的协议。
-
Telnet:类似于 SSH,用于远程登录到另一个计算机,但不提供加密和安全性。
-
HTTPS(Hypertext Transfer Protocol Secure):HTTP 的安全版本。
-
SNMP(Simple Network Management Protocol):用于在网络设备之间进行管理和监控的协议,允许管理员远程监视和管理网络设备。
-
WebSocket:一种在网络上实现全双工通信的协议,允许客户端和服务器之间进行实时的双向通信,适用于 Web 应用中的实时通信和数据推送。