1. HTTP协议基础认知
第一次接触HTTP协议是在2013年做校园论坛项目时,当时为了调试一个表单提交问题,不得不打开Chrome开发者工具查看网络请求。那个瞬间突然明白:原来浏览器和服务器之间的对话,都是通过这种明文的文本协议完成的。
HTTP(HyperText Transfer Protocol)本质上是一种应用层通信协议,它定义了客户端和服务器之间交换信息的格式和规则。就像两个说同一种语言的人才能顺畅交流,浏览器和Web服务器也必须遵循HTTP协议才能正确理解彼此的意图。
关键认知:HTTP是无状态的协议,这意味着服务器不会记住之前的请求信息。这种设计既简化了服务器实现,也为后续的会话管理机制(如Cookie)埋下了伏笔。
在JavaWeb开发中,我们最常接触的是HTTP/1.1版本。一个典型的HTTP交互包含四个阶段:
- 建立TCP连接(三次握手)
- 客户端发送请求报文
- 服务器返回响应报文
- 关闭TCP连接(四次挥手)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. HTTP请求报文深度解析
2.1 请求报文结构解剖
用Wireshark抓取一个访问百度首页的请求,原始报文如下:
code复制GET / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0
Accept: text/html
这个简单报文包含三个关键部分:
- 请求行:GET方法 + 路径 + HTTP版本
- 请求头:键值对形式的元数据
- 请求体:GET没有,POST等方法的参数在这里
在Java中获取这些信息非常直观:
java复制// 获取请求方法
String method = request.getMethod();
// 获取请求头
String userAgent = request.getHeader("User-Agent");
// 获取查询参数
String name = request.getParameter("name");
2.2 8种HTTP方法实战对比
除了常见的GET/POST,HTTP协议实际定义了8种方法:
| 方法 | 安全性 | 幂等性 | 典型场景 |
|---|---|---|---|
| GET | 是 | 是 | 获取资源 |
| POST | 否 | 否 | 创建资源/提交数据 |
| PUT | 否 | 是 | 完整更新资源 |
| PATCH | 否 | 否 | 部分更新资源 |
| DELETE | 否 | 是 | 删除资源 |
| HEAD | 是 | 是 |
