13.HTTP协议
# 01.HTTP协议
# 1、概述
- HTTP(超文本传输协议)是一种用于在客户端和服务器之间传输超文本的通信协议
- 它是互联网最核心的协议之一,用于实现Web浏览器与Web服务器之间的交互
- HTTP协议规定了客户端如何请求服务器的资源,以及服务器如何响应客户端的请求
# 2、HTTP的特点
无状态:
- 每个HTTP请求都是独立的,服务器不会保留上一个请求的信息
- 即每个请求和响应都是完全独立的,服务器不会主动记住用户的状态
基于请求-响应模型:客户端发送请求(Request),服务器返回响应(Response)
简单性:HTTP报文的结构比较简单,容易理解和实现,开发者容易掌握
无连接:
- HTTP协议在默认情况下是无连接的,也就是说在一次请求之后,连接就会关闭
- 每次新的请求都需要重新建立连接
灵活性:
- HTTP协议支持不同类型的数据传输,除了文本,还可以传输图片、视频、音频等
# 3、HTTP协议的版本
① HTTP/1.0:
每次请求需要新建一个TCP连接,完成后立即关闭
头部信息简单,没有缓存、持久连接等高级特性
性能较差,尤其在加载包含多个资源(如图片、CSS、JS文件)的页面时,需要反复建立和关闭连接
② HTTP/1.1(广泛使用的版本):
持久连接(Persistent Connection):允许在同一个TCP连接上发送多个请求和响应,减少了频繁的TCP连接建立和断开
管线化(Pipelining):允许客户端在发送一个请求的同时不必等待上一个请求的响应,这提高了传输效率
缓存机制:引入了缓存控制(如
Cache-Control
)的头部字段,减少了不必要的服务器请求分块传输编码:允许服务器分块传输响应内容,使得客户端可以逐块接收数据,适合大文件的传输
③ HTTP/2:
二进制协议:相比HTTP/1.x的纯文本协议,HTTP/2采用二进制格式传输数据,提高了传输效率
多路复用(Multiplexing):
- 多个请求和响应可以在一个TCP连接上并行传输,无需排队等待
- 解决了HTTP/1.1中的队头阻塞(Head-of-Line Blocking)问题
头部压缩:通过HPACK算法对HTTP头部进行压缩,减少了数据传输量
服务器推送(Server Push):服务器可以主动推送资源给客户端,减少客户端的请求次数
④ HTTP/3:
基于QUIC协议:
- HTTP/3不再使用TCP,而是基于Google开发的QUIC协议
- QUIC集成了传输控制和TLS(加密)层,减少了延迟和连接建立时间
更快的传输速度:
- QUIC可以减少连接时的握手时间,提高了传输速度,尤其适用于不稳定的网络环境
# 4、HTTP的工作流程
① 客户端发送请求:用户通过浏览器或其他HTTP客户端发起请求
请求行:定义了请求方法(如GET、POST)、请求的URL、协议版本(如HTTP/1.1)
请求头(Headers):包括与请求相关的元数据,如
User-Agent
、Accept
、Host
等请求体(Body):
- 在某些请求方法(如POST、PUT)中,客户端可能会发送数据给服务器,这些数据会放在请求体中
② 服务器处理请求并发送响应:
响应行:包含HTTP版本、状态码(如200、404等)以及状态描述
响应头(Headers):包含与响应相关的元数据,如
Content-Type
、Content-Length
等响应体(Body):服务器返回的实际数据,如网页的HTML内容、图片、视频等
③ 客户端处理响应:
- 客户端收到服务器的响应后,根据响应的内容进行处理,显示网页或其他资源,或者进行进一步操作
# 5、常见的HTTP方法
- GET:请求指定的资源GET请求通常是幂等的,且不应包含请求体
- POST:向服务器提交数据,通常用于提交表单或上传文件
- PUT:向服务器上传指定资源,可以用来更新资源
- DELETE:请求服务器删除指定的资源
- HEAD:与GET类似,但服务器只返回响应头,不返回响应体,用于检查资源
- OPTIONS:请求服务器支持的通信选项,通常用于跨域请求的预检
- PATCH:用于局部更新资源
# 6、HTTP状态码
- 1xx(信息响应):请求已接收,正在继续处理
- 2xx(成功响应):请求已成功处理常见的有
200 OK
(请求成功)、204 No Content
(成功但无返回内容) - 3xx(重定向):需要进一步操作以完成请求常见的有
301 Moved Permanently
(永久重定向)、302 Found
(临时重定向) - 4xx(客户端错误):客户端请求错误常见的有
400 Bad Request
(请求无效)、401 Unauthorized
(未授权)、404 Not Found
(资源未找到) - 5xx(服务器错误):服务器处理请求时发生错误常见的有
500 Internal Server Error
(服务器内部错误)、503 Service Unavailable
(服务不可用)
# 7、HTTP与HTTPS
- HTTP是明文传输的,这意味着请求和响应的内容可以被第三方拦截和查看,存在安全隐患
- HTTPS是HTTP的安全版
- 它通过SSL/TLS协议加密传输的数据,确保数据的安全性和隐私性
- HTTPS通过在HTTP上添加加密层,防止数据在传输过程中被窃取或篡改
# 8、HTTP协议的安全性问题
- 数据窃听:由于HTTP是明文传输,攻击者可以通过拦截请求和响应获取敏感信息(如登录凭证、个人数据等)
- 中间人攻击:攻击者可以篡改传输的数据,改变请求或响应的内容
- 身份伪造:攻击者可以伪装成合法的服务器或客户端,获取敏感信息