温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

HTTP响应如何解析

发布时间:2026-07-15 21:30:23 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

HTTP 响应解析是理解 Web 通信的关键步骤。HTTP 响应由状态行、响应头(Headers)和响应体(Body)三部分组成。下面从结构说明实际解析示例两个角度来讲解。


一、HTTP 响应结构

一个典型的 HTTP 响应格式如下:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 137
Connection: keep-alive

<html>
<head><title>Hello</title></head>
<body>Hello World</body>
</html>

1️⃣ 状态行(Status Line)

HTTP/1.1 200 OK

含义:

  • HTTP/1.1:协议版本
  • 200:状态码
  • OK:状态描述

常见状态码:

  • 200 OK:成功
  • 301 / 302:重定向
  • 404 Not Found:资源不存在
  • 500 Internal Server Error服务器错误

2️⃣ 响应头(Headers)

Content-Type: text/html; charset=UTF-8
Content-Length: 137

作用:

  • 描述响应的元信息
  • 常见字段:
    • Content-Type:内容类型
    • Content-Length:响应体长度
    • Set-Cookie:设置 Cookie
    • Cache-Control:缓存策略

3️⃣ 空行

\r\n

用于分隔 Header 和 Body(必须存在)。


4️⃣ 响应体(Body)

<html>...</html>
  • 可能是 HTML、JSON、图片、文件等
  • 不一定存在(如 204 No Content

二、如何解析 HTTP 响应(示例)

1️⃣ 浏览器自动解析(最常见)

浏览器收到 HTTP 响应后:

  • 根据 Content-Type 决定如何渲染
  • HTML → 渲染页面
  • JSON → 交给 JS 处理

2️⃣ 使用 JavaScript(fetch)

fetch('/api/data')
  .then(res => {
    console.log(res.status);        // 状态码
    console.log(res.headers.get('Content-Type'));
    return res.json();              // 解析响应体
  })
  .then(data => {
    console.log(data);
  });

3️⃣ 使用 Node.js(原生 http)

const http = require('http');

http.get('http://example.com', res => {
  console.log('状态码:', res.statusCode);
  console.log('响应头:', res.headers);

  let data = '';
  res.on('data', chunk => data += chunk);
  res.on('end', () => {
    console.log('响应体:', data);
  });
});

4️⃣ 使用 Python(requests)

import requests

r = requests.get('http://example.com')

print(r.status_code)
print(r.headers)
print(r.text)      # 文本
print(r.content)   # 二进制

三、手动解析 HTTP 响应(理解原理)

假设收到原始字符串:

HTTP/1.1 200 OK\r\n
Content-Type: application/json\r\n
Content-Length: 27\r\n
\r\n
{"msg": "hello", "code": 0}

解析步骤:

  1. \r\n 分割
  2. 第一行是状态行
  3. 直到空行是 Header
  4. 空行之后是 Body

四、常见注意点

✅ 响应体可能:

  • 分块传输(Transfer-Encoding: chunked
  • 压缩(Content-Encoding: gzip
  • 需要按 Content-Type 解析

✅ 状态码 ≠ 业务成功
例如:200 OK 但返回 { "error": "invalid" }


五、总结一句话

HTTP 响应解析 = 读取状态行 → 解析响应头 → 根据 Content-Type 解析响应体

如果你有具体场景(如浏览器、后端、抓包、面试、手写解析器),可以告诉我,我可以针对性讲解。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI