HTTP协议基础:请求与响应、常见方法、状态码

说实话,很多初学者一上来就撸代码,结果连HTTP请求都发不明白。我见过太多人把GET请求的参数塞到请求体里,然后跑来问我为什么服务器不认。嗯,今天我们就从根上把HTTP协议捋清楚。

一、HTTP请求长什么样?

一个HTTP请求,说白了就是一段有格式的文本。你想想看,浏览器和服务器之间通信,总得有个规矩吧?这个规矩就是HTTP协议。

一个典型的GET请求是这样的:

GET /api/users?id=123 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json

我个人习惯把请求拆成三部分来看:

  • 请求行:第一行,包含方法、路径、协议版本
  • 请求头:从第二行开始到空行结束,携带元数据
  • 请求体:空行之后的内容,POST请求常用

重点记住:请求头和请求体之间必须有一个空行。我曾经调试一个接口调了半天,最后发现是忘了加这个空行,服务器一直收不到body数据。

二、HTTP响应又是什么?

服务器收到请求后,会返回一个响应。格式和请求类似,但第一行变成了状态行。

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 45

{"status":"success","data":[]}

响应也分三部分:

  • 状态行:协议版本 + 状态码 + 状态描述
  • 响应头:告诉客户端怎么处理返回的数据
  • 响应体:实际返回的数据内容

小技巧:在鸿蒙开发中,用HttpClient调试时,记得先打印响应头。我经常通过Content-Type来判断返回的是JSON还是HTML,避免解析出错。

三、常见的HTTP方法

实际开发中,最常用的就两个:GET和POST。但作为专业开发者,其他几个也得了解。

方法 用途 是否携带请求体 幂等性
GET 获取资源
POST 创建资源
PUT 更新资源(全量)
DELETE 删除资源 通常否
PATCH 更新资源(部分)

避坑指南:我曾经在项目中用GET请求传了一个很长的JSON参数,结果浏览器直接报414错误。因为GET请求的URL长度是有限制的,一般不超过2048个字符。数据量大时,请用POST。

四、HTTP状态码

状态码是服务器给客户端的「暗号」。我刚开始学的时候记不住,后来发现其实有规律可循。

1xx:信息提示

用得很少,表示请求已接收,继续处理。比如101表示切换协议(WebSocket升级时用)。

2xx:成功

  • 200 OK:请求成功,最常用的状态码
  • 201 Created:资源创建成功,POST请求后常见
  • 204 No Content:成功但无返回内容,DELETE请求常用

3xx:重定向

  • 301 Moved Permanently:资源永久迁移
  • 302 Found:临时重定向
  • 304 Not Modified:缓存有效,直接用本地缓存

个人经验:304状态码经常被忽略。我在优化App性能时,通过合理设置缓存头,让客户端返回304时直接使用本地数据,网络请求量减少了40%。

4xx:客户端错误

  • 400 Bad Request:请求格式错误,参数不对
  • 401 Unauthorized:未认证,需要登录
  • 403 Forbidden:已认证但无权限
  • 404 Not Found:资源不存在
  • 405 Method Not Allowed:请求方法不支持
  • 429 Too Many Requests:请求频率过高

5xx:服务器错误

  • 500 Internal Server Error:服务器内部错误,最头疼的
  • 502 Bad Gateway:网关错误,上游服务挂了
  • 503 Service Unavailable:服务暂时不可用,过载或维护
  • 504 Gateway Timeout:网关超时,上游响应太慢

调试建议:在鸿蒙开发中,遇到500错误先别慌。我一般先看响应体里有没有错误详情,如果没有,再去看服务器日志。很多时候是参数类型不匹配导致的。

五、知识体系总览

下面这张图是我自己整理的HTTP协议核心脉络,你看完应该能串起来了:

HTTP协议核心知识体系 客户端(App/浏览器) 服务器 HTTP请求 HTTP响应 请求结构 • 请求行:GET /api HTTP/1.1 • 请求头:Host、User-Agent等 • 空行(必须) • 请求体(POST/PUT时使用) 响应结构 • 状态行:HTTP/1.1 200 OK • 响应头:Content-Type等 • 空行 • 响应体:JSON/HTML等数据 常见方法:GET(查) POST(增) PUT(改) DELETE(删) PATCH(部分改)

这张图把HTTP的核心流程和结构都画出来了。你想想看,客户端发请求,服务器回响应,中间就是方法和状态码在起作用。说白了,搞懂这张图,HTTP协议你就入门了。

总结一下:HTTP协议没那么神秘,它就是客户端和服务器之间约定好的沟通格式。记住请求的三部分、响应的三部分、常用的几个方法和状态码,你就能应付90%的开发场景了。


公众号:蓝海资料掘金营,微信deep3321