上一篇
http协议api
- 行业动态
- 2025-05-01
- 3780
HTTP协议API基于请求-响应模型,通过GET/POST等方法实现客户端与服务器数据交互,支持RESTful架构,用于Web服务集成与资源
HTTP协议基础
HTTP(HyperText Transfer Protocol)是用于客户端与服务器之间传输超文本数据的协议,基于TCP/IP协议族,其核心特点包括:
- 无状态协议:每次请求独立,服务器不保存上下文。
- 请求-响应模型:客户端发起请求,服务器返回响应。
- 通用性:支持多种数据格式(如JSON、XML、HTML等)。
HTTP方法与用途
方法 | 用途 | 示例场景 |
---|---|---|
GET | 获取资源 | 查询用户信息、下载文件 |
POST | 提交数据 | 表单提交、新增资源 |
PUT | 更新资源 | 修改用户资料 |
DELETE | 删除资源 | 删除订单记录 |
HEAD | 获取元信息 | 检查资源是否存在 |
OPTIONS | 预检请求 | 跨域请求前验证方法 |
HTTP请求结构
请求行
GET /api/users HTTP/1.1
- 方法:GET
- 路径:/api/users
- 版本:HTTP/1.1
请求头
Host: example.com User-Agent: Mozilla/5.0 Accept: application/json
Host
:目标域名。User-Agent
:客户端标识。Accept
:支持的响应类型。
消息体(仅限POST/PUT等方法)
{ "name": "John", "age": 30 }
HTTP响应结构
状态行
HTTP/1.1 200 OK
- 版本:HTTP/1.1
- 状态码:200
- 状态描述:OK
响应头
Content-Type: application/json Content-Length: 123
Content-Type
:响应数据类型。Content-Length
:响应体长度。
响应体
{ "id": 1, "name": "John" }
HTTP状态码分类
类别 | 范围 | 含义 | 示例 |
---|---|---|---|
1xx | 100-199 | 信息响应 | 101 Switching Protocols |
2xx | 200-299 | 成功 | 200 OK, 201 Created |
3xx | 300-399 | 重定向 | 301 Moved Permanently, 302 Found |
4xx | 400-499 | 客户端错误 | 400 Bad Request, 404 Not Found |
5xx | 500-599 | 服务器错误 | 500 Internal Server Error, 503 Service Unavailable |
HTTP API实际应用示例
使用Python requests
库发送GET请求
import requests response = requests.get("https://api.example.com/users") if response.status_code == 200: data = response.json() # 解析JSON响应体 print(data) else: print(f"Error: {response.status_code}")
Java中使用HttpURLConnection
发送POST请求
URL url = new URL("https://api.example.com/login"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/json"); // 发送JSON数据 String json = "{"username":"john", "password":"12345"}"; try (OutputStream os = conn.getOutputStream()) { os.write(json.getBytes()); } // 读取响应 int status = conn.getResponseCode(); if (status == 200) { BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } else { System.out.println("Error: " + status); }
常见问题与解答
问题1:HTTP状态码301
和302
有什么区别?
解答:
- 301 Moved Permanently:表示资源永久迁移,客户端应更新后续请求的URL。
- 302 Found:表示临时重定向,客户端仍使用原URL发起后续请求。
示例:网站更换域名时返回301,而未登录用户访问受保护页面时可能返回302(跳转到登录页)。
问题2:POST和PUT方法的核心区别是什么?
解答:
- POST:用于创建新资源,服务器分配资源标识符(如ID)。
- PUT:用于更新已有资源,客户端需指定完整资源路径。
示例:提交注册表单用POST,修改