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/jsonapplication/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的核心流程,我简单说一下:

  1. 客户端请求服务器,获取证书。
  2. 客户端验证证书是否合法(是不是伪造的、有没有过期)。
  3. 验证通过后,双方协商一个对称加密密钥。
  4. 后续通信都用这个密钥加密,别人看不懂。

你想想看,如果没有HTTPS,你在公共WiFi上登录网站,密码就是裸奔的。中间人攻击了解一下?

重要提醒:现在主流API都强制要求HTTPS。如果你还在用HTTP调接口,赶紧改。我见过一个项目,内网API用HTTP,结果被内网其他服务抓包,token全泄露了。

另外,证书也有讲究。自签名证书虽然也能加密,但客户端会报“不安全”。生产环境一定要用正规CA签发的证书,比如Let's Encrypt的免费证书就挺好用。

2.5 知识体系一览

下面这张图,是我梳理的本章核心逻辑。你可以把它当作一个“地图”,方便回顾。

HTTP协议核心知识体系 HTTP方法 GET / POST PUT / DELETE PATCH 状态码 2xx 成功 3xx 重定向 4xx/5xx 错误 请求头与响应头 Content-Type Authorization Cache-Control HTTPS与安全 SSL/TLS加密 证书验证 防中间人攻击 核心要点总结 • 方法决定操作意图,GET查、POST增、PUT改、DELETE删 • 状态码是服务器的“表情”,2xx成功、4xx客户端错、5xx服务端错 • 请求头/响应头携带元数据,Content-Type和Authorization最常用 • HTTPS是HTTP的安全版本,生产环境必须用,别裸奔

我的建议:学HTTP协议,别死记硬背。你可以在浏览器开发者工具里,随便打开一个网页,看看Network面板里的请求头和响应头。看多了,自然就熟了。我当年就是这么学的。


专注资料整理