2、HTTP协议核心:HTTP方法、状态码、请求头与响应头、HTTPS与安全传输
聊到API调用,HTTP协议是绕不开的基础。说白了,你写的每一个接口调用,底层都是在跟HTTP打交道。我刚开始做后端时,总觉得这东西太基础,结果有一次线上排查问题,愣是因为搞不清PUT和PATCH的区别,折腾了一整晚。嗯,从那以后,我再也不敢小看这些“基础”了。
2.1 HTTP方法:你常用的那几个动词
HTTP方法,其实就是告诉服务器“你想干什么”。常用的有四个:GET、POST、PUT、DELETE。我习惯把它们对应到数据库的CRUD操作上,这样好记。
- GET:查。请求资源,不改变服务器状态。幂等的,你调多少次都一样。
- POST:增。提交数据,创建资源。不幂等,调一次创建一个。
- PUT:改。更新资源,通常是全量替换。幂等的。
- DELETE:删。删除资源。幂等的。
重要提醒:GET请求的参数会暴露在URL里,千万别用它传密码或敏感信息。我在项目中见过有人把token直接拼在GET的URL里,结果日志一打,全暴露了。
举个例子,假设你有一个用户资源 /api/users/123:
GET /api/users/123 → 获取用户123的信息
POST /api/users → 创建一个新用户
PUT /api/users/123 → 全量更新用户123的信息
DELETE /api/users/123 → 删除用户123
你想想看,如果我只想改用户的手机号,用PUT就得把整个用户对象都传过去。这时候,其实用PATCH更合适——只传要改的字段。不过很多团队图省事,统一用PUT,我个人不太建议,容易出歧义。
2.2 状态码详解:服务器在跟你“说话”
每次HTTP请求,服务器都会返回一个三位数的状态码。这玩意儿就像服务器的“表情”,告诉你请求结果如何。我刚开始调接口时,看到4xx就慌,后来发现其实很有规律。
| 状态码 | 含义 | 常见场景 |
|---|---|---|
| 200 | OK | 请求成功,返回数据 |
| 201 | Created | POST创建资源成功 |
| 204 | No Content | DELETE成功,无返回体 |
| 301 | Moved Permanently | 资源永久重定向 |
| 400 | Bad Request | 参数错误,客户端问题 |
| 401 | Unauthorized | 未认证,需要登录 |
| 403 | Forbidden | 已认证但无权限 |
| 404 | Not Found | 资源不存在 |
| 500 | Internal Server Error | 服务器内部错误 |
| 502 | Bad Gateway | 网关或代理出错 |
| 503 | Service Unavailable | 服务暂时不可用 |
我的小技巧:调接口时,先看状态码,再看返回体。状态码是“结论”,返回体是“详情”。我曾经遇到一个接口返回200但数据是空的,排查半天发现是业务逻辑里偷偷吞了错误,应该返回500才对。
2.3 请求头与响应头:藏在“信封”上的信息
HTTP头就像信封上的收件人地址和邮戳。请求头告诉服务器“我是谁、我要什么”,响应头告诉客户端“你拿到了什么、下一步该怎么做”。
常用请求头:
Content-Type:告诉服务器我发的是什么格式。比如application/json或application/x-www-form-urlencoded。Authorization:携带认证信息,比如Bearer <token>。Accept:告诉服务器我能接受什么格式的响应。User-Agent:标识客户端类型,比如浏览器、手机App。
常用响应头:
Content-Type:告诉客户端返回的数据格式。Set-Cookie:服务器让客户端存一个Cookie。Cache-Control:控制缓存行为,比如no-cache表示不缓存。Access-Control-Allow-Origin:跨域相关的头,CORS用的。
避坑指南:我曾经在对接第三方API时,一直报415错误,查了半天才发现是忘了设置 Content-Type: application/json。默认的 text/plain 人家不认。记住,发JSON就得明确告诉服务器。
2.4 HTTPS与安全传输:给数据加把锁
HTTP是明文传输的,就像在明信片上写密码,谁都能看。HTTPS就是在HTTP外面套了一层SSL/TLS加密。说白了,就是把明信片装进加密信封里。
HTTPS的核心流程,我简单说一下:
- 客户端请求服务器,获取证书。
- 客户端验证证书是否合法(是不是伪造的、有没有过期)。
- 验证通过后,双方协商一个对称加密密钥。
- 后续通信都用这个密钥加密,别人看不懂。
你想想看,如果没有HTTPS,你在公共WiFi上登录网站,密码就是裸奔的。中间人攻击了解一下?
重要提醒:现在主流API都强制要求HTTPS。如果你还在用HTTP调接口,赶紧改。我见过一个项目,内网API用HTTP,结果被内网其他服务抓包,token全泄露了。
另外,证书也有讲究。自签名证书虽然也能加密,但客户端会报“不安全”。生产环境一定要用正规CA签发的证书,比如Let's Encrypt的免费证书就挺好用。
2.5 知识体系一览
下面这张图,是我梳理的本章核心逻辑。你可以把它当作一个“地图”,方便回顾。
我的建议:学HTTP协议,别死记硬背。你可以在浏览器开发者工具里,随便打开一个网页,看看Network面板里的请求头和响应头。看多了,自然就熟了。我当年就是这么学的。