文章目录
- 介绍一下HTTP报文结构
- HTTP请求方法有哪些,分别代表什么含义
- HTTP响应状态码分为哪几类
- HTTP和HTTPS的区别
- HTTP请求为什么是无状态的
- 如何使用HTTP实现有状态访问
介绍一下HTTP报文结构
HTTP请求头结构图:
请求报文整体分为四个部分:
- 请求行:包含一下几个结构
- 请求方法:表示这个报文的目的,具体有(POST、GET、PUT、Delete、HEAD、CONNECT等)
- URI:代表服务器上的资源路径
- HTTP版本:使用的协议版本
- 请求头: HTTP 请求头用于向服务器说明“我是谁、我想要什么、我怎么传、你要怎么处理”,常见请求头有
User-Agent,Accept-Language,Accept-Encoding - 空行:用来分隔“请求头”和“请求体”
- 请求正文(请求体):可选,不是所有请求都有消息体。存储要发送的数据。
HTTP响应头结构
主要也分为四个部分
- 状态行:主要包含三个部分:
- HTTP版本:使用的协议版本
- 状态码:请求处理结果
- 状态描述: 对状态码的文字说明
- 响应头:类似于请求头
- 空行:用来分隔响应头和响应体
- 响应体:携带真正的数据内容
HTTP请求方法有哪些,分别代表什么含义
HTTP的请求方法分为以下几种,并提供含义
- GET:从服务器获取资源,不改变服务器状态。
- POST:用于提交数据。向服务器提交数据,通常用于新增或触发操作,会改变服务器状态。
- PUT:用新数据“整体替换”服务器上的资源,会改变服务器状态。
- DELETE:删除服务器上的指定资源。
- PATCH:只修改资源的部分字段。
- HEAD:与 GET 类似,但不返回响应体。用于判断资源是否存在等
- OPTIONS:询问服务器支持哪些方法或跨域能力。
- TRACE:请求回显,服务器原样返回收到的请求。
- CONNECT:用于 HTTPS 代理,建立 TCP 隧道。
HTTP响应状态码分为哪几类
HTTP 状态码是三位数字,按第一位进行分类,主要分为以下几类每一类给出常见几个状态码:
- 1xx:表示表示请求已接收,继续处理。
100 continue: 客户端可继续发送请求体101 Switching Protocols:协议升级(如 HTTP升级为WebSocket)
- 2xx:请求被服务器正确处理.
200 OK: 请求成功201 Created: 资源创建成功204 No Content: 成功但无响应体
- 3xx: 重定向,需要客户端采取进一步操作。
301 Moved Permanently: 永久重定向302 Found: 临时重定向304 Not Modified:使用缓存
- 4xx: 请求有问题,服务器无法处理
400 Bad Request: 请求格式错误。401 Unauthorized: 未认证403 Forbidden: 无权限404 Not Found: 资源不存在
- 5xx: 服务端错误
500 Internal Server Error: 服务器内部错误502 Bad Gateway: 网关错误503 Service Unavailable: 服务不可用504 Gateway Timeout: 网关超时
HTTP和HTTPS的区别
HTTP 是明文传输协议,不安全;HTTPS 在 HTTP 基础上通过 TLS 加密,保证通信的机密性、完整性和身份认证。
HTTPS的大致流程:
- 客户端发起 HTTPS 请求
- 服务器返回数字证书
- 客户端验证证书合法性
- 利用证书中公钥协商对称密钥
- 使用对称加密传输 HTTP 数据
HTTP请求为什么是无状态的
无状态的含义:HTTP 本身不记录请求之间的状态,每次请求都是独立的,服务器不知道上一次请求发生了什么。 HTTP总体流程为客户端发一次请求 → 服务器处理 → 返回响应 → 不保存客户端信息.下次请求,服务器知道你上一次做了什么.
为什么设计为无状态:
- 简单:TTP协议最初设计为一个简单的、轻量级的协议,旨在快速传输网页内容。无状态的设计使得服务器不必为每个客户端维护状态信息,从而减少了服务器的负担和复杂性。
- 可伸缩性:无状态的特性使得服务器可以很容易地扩展,因为每个请求都可以由任何一个服务器处理,而不必关心之前的请求历史。这使得负载均衡变得更加容易,因为可以将请求分发到不同的服务器上,而无需担心状态信息的同步问题。
- 可靠性:无状态的设计使得HTTP协议更加健壮。如果某个请求失败了,客户端可以重新发送请求,而不需要担心之前的请求状态。服务器只需处理当前的请求即可,无需维护长期的状态信息。
- 安全性:无状态的特性也有助于提高安全性。因为每个请求都是独立的,所以攻击者很难通过分析请求序列来获取敏感信息。此外,无状态的设计使得服务器不必担心状态信息被篡改或泄露。
如何使用HTTP实现有状态访问
思路:HTTP 本身不保存状态 → 状态信息由客户端携带 + 服务器存储 → 形成有状态访问。
常见方案
- Cookie + Session: 方案总体流程
- 用户第一次访问网站,服务器生成一个Session ID,在服务器保存状态数据。
- 服务器通过Set-Cookie把 Session ID 发给客户端
- 客户端每次请求都带上 Cookie(Session ID)
- 服务器根据 Session ID 找到对应状态,完成有状态访问
- Token:方案总体流程
- 用户登录 → 服务器生成Token
- 服务器把 Token 返回给客户端
- 客户端每次请求带上 Token(Header 或 Cookie中)
- 服务器解析 Token → 得到用户状态
- URL参数:放在把状态信息放在 URL/ 消息体 中传递。(不建议)