深色模式
HTTP
概述
HTTP 是 Web 世界里最常见的应用层协议。浏览器打开网页,前端请求接口,服务之间调 API,底下跑的很多都是它。
理解 HTTP,不用一开始就背协议细节。先抓住一个简单事实:它定义的是“客户端和服务端怎么交换请求与响应”。页面、图片、JSON、视频都可以借它传,但它本身并不关心你传的是哪类业务。
一个请求大致长什么样
客户端向服务端发起一次 HTTP 请求时,通常包含这些部分:
- 请求方法
- 路径
- 协议版本
- 请求头
- 可选的请求体
例如:
http
GET /users/42 HTTP/1.1
Host: example.com
Accept: application/json服务端处理后,会返回响应:
- 状态码
- 响应头
- 可选的响应体
http
HTTP/1.1 200 OK
Content-Type: application/json
{"id":42,"name":"Tom"}方法在表达什么
请求方法描述的是“这次请求打算做什么”。
常见方法包括:
GET:读取资源POST:提交数据,常用于创建或触发动作PUT:整体更新资源PATCH:部分更新资源DELETE:删除资源
方法不是权限系统,也不是绝对行为保证,而是一种语义约定。后端如果把删除操作偷偷挂在 GET 上,也不是协议不让做,而是设计很容易挨打。
路径、域名和 URL 是什么关系
一条完整请求地址,例如:
text
https://api.example.com:443/users/42?verbose=true里面通常包含:
- 协议:
https - 主机名:
api.example.com - 端口:
443 - 路径:
/users/42 - 查询参数:
?verbose=true
其中:
- 域名用于定位主机
- 路径用于定位资源或路由
- 查询参数用于附加筛选、分页、搜索等条件
请求头和响应头在做什么
请求头和响应头用来携带“如何处理这次通信”的附加信息。
常见请求头有:
HostAuthorizationAcceptContent-TypeUser-Agent
常见响应头有:
Content-TypeContent-LengthCache-ControlSet-CookieLocation
它们不是业务主体本身,但会影响认证、缓存、跨域、内容解析、跳转等行为。
Content-Type 为什么重要
Content-Type 用来告诉对方:消息体里的内容是什么格式。
例如:
application/jsontext/html; charset=utf-8multipart/form-dataimage/png
如果这个头写错了,客户端可能会用错误方式解析内容。最典型的情况就是服务端明明返回的是 JSON,却没标对,前端、浏览器或代理层的行为就会开始变得不稳定。
状态码怎么理解
状态码表示服务端对这次请求的处理结果。
最常见的几类是:
2xx:成功3xx:重定向4xx:客户端请求有问题5xx:服务端处理失败
日常最常见的几个状态码:
200 OK201 Created301 Moved Permanently302 Found400 Bad Request401 Unauthorized403 Forbidden404 Not Found500 Internal Server Error
状态码表达的是协议层结果,不一定等于业务是否成功。有些接口总是返回 200,然后在 JSON 里再放业务错误码,这是一种实现选择,但对排查问题不总是友好。
HTTP 为什么被说成无状态
无状态的意思是:协议层面上,每个请求天然独立,服务器不会因为“上一条请求来过”就自动记住上下文。
如果应用希望记住用户登录状态、购物车、会话信息,就需要借助额外机制,例如:
CookieSessionToken
也就是说,“用户有登录态”不是 HTTP 自带记忆力,而是应用在协议之上额外补出来的状态管理。
HTTPS 和 HTTP 的关系
HTTPS 可以粗略理解为“跑在 TLS 之上的 HTTP”。
它并没有把 HTTP 换掉,而是在传输层多加了一层安全保护,主要解决:
- 传输内容保密
- 连接对端身份验证
- 防止中途篡改
所以:
HTTP关注消息怎么组织HTTPS关注这些消息怎么安全传输
开发里几个常见误区
协议、域名、路径混成一团
接口地址看起来是一整串,但协议、主机、端口、路径、查询参数各自职责不同,出错时也要分开排查。
只看状态码,不看响应体
很多排查会卡在这里。协议层可能成功了,业务层却失败了。
只看响应体,不看请求头
认证失败、跨域异常、缓存错乱,很多问题根本不在 JSON 内容本身,而在头信息。
把 HTTPS 当成“HTTP 的另一个版本号”
它不是 HTTP/2、HTTP/3 这种协议版本关系,而是 HTTP 配合 TLS 的安全传输形式。
