当前位置:首页 > 行业动态 > 正文

http协议api

HTTP协议API基于请求-响应模型,通过GET/POST等方法实现客户端与服务器数据交互,支持RESTful架构,用于Web服务集成与资源

HTTP协议基础

HTTP(HyperText Transfer Protocol)是用于客户端与服务器之间传输超文本数据的协议,基于TCP/IP协议族,其核心特点包括:

  • 无状态协议:每次请求独立,服务器不保存上下文。
  • 请求-响应模型:客户端发起请求,服务器返回响应。
  • 通用性:支持多种数据格式(如JSON、XML、HTML等)。

HTTP方法与用途

方法 用途 示例场景
GET 获取资源 查询用户信息、下载文件
POST 提交数据 表单提交、新增资源
PUT 更新资源 修改用户资料
DELETE 删除资源 删除订单记录
HEAD 获取元信息 检查资源是否存在
OPTIONS 预检请求 跨域请求前验证方法

HTTP请求结构

  1. 请求行

    GET /api/users HTTP/1.1
    • 方法:GET
    • 路径:/api/users
    • 版本:HTTP/1.1
  2. 请求头

    http协议api  第1张

    Host: example.com
    User-Agent: Mozilla/5.0
    Accept: application/json
    • Host:目标域名。
    • User-Agent:客户端标识。
    • Accept:支持的响应类型。
  3. 消息体(仅限POST/PUT等方法)

    { "name": "John", "age": 30 }

HTTP响应结构

  1. 状态行

    HTTP/1.1 200 OK
    • 版本:HTTP/1.1
    • 状态码:200
    • 状态描述:OK
  2. 响应头

    Content-Type: application/json
    Content-Length: 123
    • Content-Type:响应数据类型。
    • Content-Length:响应体长度。
  3. 响应体

    { "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状态码301302有什么区别?

解答

  • 301 Moved Permanently:表示资源永久迁移,客户端应更新后续请求的URL。
  • 302 Found:表示临时重定向,客户端仍使用原URL发起后续请求。
    示例:网站更换域名时返回301,而未登录用户访问受保护页面时可能返回302(跳转到登录页)。

问题2:POST和PUT方法的核心区别是什么?

解答

  • POST:用于创建新资源,服务器分配资源标识符(如ID)。
  • PUT:用于更新已有资源,客户端需指定完整资源路径。
    示例:提交注册表单用POST,修改
0