跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java 网络协议:HTTP 请求与响应

详细讲解了 HTTP 协议的请求与响应结构。内容包括请求格式(首行、请求头、空行、正文)、常用请求方法(GET、POST 等)的区别及特点、URL 的组成与编码规则。重点介绍了关键请求头(Host、Content-Length、User-Agent、Referer、Cookie)的功能与应用场景,特别是 Session 认证机制。此外,还涵盖了响应状态码的分类含义(2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务器错误)以及响应正文的不同 Content-Type 格式。通过抓包示例展示了 multipart/form-data、application/json 等数据格式的实际表现,帮助读者掌握 Web 通信的基础原理。

未来可期发布于 2026/3/29更新于 2026/10/2695 浏览
Java 网络协议:HTTP 请求与响应

HTTP 请求

请求格式

请求格式由首行、请求头(Header)、空行和正文(Body)组成。

文章配图

首行组成

首行由请求方法、URL 和版本号组成,使用空格分隔。

文章配图

请求方法
方法说明支持的 HTTP 版本
GET获取资源1.0, 1.1
POST传输实体主体1.0, 1.1
PUT传输文件1.0, 1.1
DELETE删除文件1.0, 1.1
HEAD获取报文首部1.0, 1.1
OPTIONS询问支持的方法1.1
TRACE追踪路径1.1
CONNECT要求用隧道协议连接代理1.1
LINK建立和资源之间的联系1.0
UNLINK断开连接关系1.0
  1. GET 方法:最常用的 HTTP 方法,常用于获取服务器上的某个资源。

    GET 方法特点:首行的第一部分为 GET。URL 的 query string 可以为空,也可以不为空。Header 部分有若干个键值对结构。Body 部分一般没有,正文包含在 URL 的查询字符串中。

  2. POST 方法:常用于提交用户输入的数据给服务器(例如登录页面)。可通过 HTML 中的 form 标签构造,或使用 JavaScript 的 Ajax 构造。

    POST 请求的特点:首行的第一部分为 POST。URL 的 query string 一般为空(也可以不为空)。Header 部分有若干个键值对结构。Body 部分一般不为空,Body 内的数据格式通过 Header 中的 Content-Type 指定,长度由 Content-Length 指定。

GET 与 POST 的区别:

  1. 语义不同:GET 一般是获取数据,POST 一般是提交数据。
  2. 携带数据的方式不同:
    • GET 的 Body 一般为空,需要传递的数据通过 query string 传递。
    • POST 的 query string 一般为空,需要传递的数据通过 Body 传递。
  • 幂等性:GET 请求通常建议是幂等的(多次请求结果一样),设计成幂等时可被缓存;POST 不能被缓存。
  • 实际使用中两者区别不大,常被混用。
  • URL 组成

    URL 组成:协议名称 : //要访问的服务器的 IP 地址或域名/端口号/带有层次结构的路径?查询字符串

    文章配图

    成分解析:

    1. 协议名称:使用的协议。
    2. 服务器 IP 或域名:确定主机(IP 和域名转换通过 DNS 完成)。
    3. 端口号:确定程序。未写则默认:HTTP 为 80,HTTPS 为 443。
    4. 路径:确定具体资源。
    5. 查询字符串 (query string):本质是键值对结构,键值对之间用&分隔,键和值之间用=分隔。
    6. 片段标识符:用于页面内跳转,现在较少使用。
    7. 登陆信息:在协议名与服务器 IP 之间,现代网站身份认证一般不再通过 URL 进行,通常省略。

    URLEncode:

    像 / ? : 等字符已被 URL 视为特殊意义,不能随意出现。若参数中包含这些特殊字符,需先转义。非英语文字也会进行转义。 规则:将字符转为 16 进制,从右到左取 4 位(不足 4 位直接处理),每 2 位做一位,前面加上%,编码成%XY 格式。

    URL 中的可省略部分:

    • 协议名:可省略,默认为 http://
    • IP 地址/域名:HTML 中可省略(如 img, link, script, a 标签的 src 或 href),表示与当前 HTML 所属域名一致。
    • 端口号:可省略。HTTP 默认为 80,HTTPS 默认为 443。
    • 路径:可省略,相当于 /。部分服务器会自动访问/index.html。
    • 查询字符串:可省略。
    • 片段标识:可省略。
    • 登陆信息:可省略。

    请求头(Header)

    Header 整体格式为'键值对'结构,每个键值对占一行,键和值之间使用冒号加空格分割。键和值通过 RFC 标准文档 规定。

    Host

    Host 表示服务器主机的地址和端口。

    文章配图

    Content-Length 和 Content-Type
    • Content-Length:表示 Body 中的数据长度,单位为字节。
    • Content-Type:表示 Body 中的数据格式。

    文章配图

    关于 Content-Type 的详细取值请参考:文档

    注意事项:

    • 有时请求中没有 Body 正文,就不会有这两个 Header。
    • 如果有 Body 正文,缺少这两个 Header 或只有其中一个,则为非法请求或响应。
    User-Agent (简称 UA)

    User-Agent 表示用户使用的设备的浏览器和操作系统情况。

    文章配图

    Referer

    表示这个页面是从哪个页面跳转过来的。直接输入 URL 或点收藏栏打开的页面没有 Referer。

    文章配图

    Cookie

    Cookie 中存储了一个字符串,数据可能来自客户端(网页自行通过 JS 写入)或服务器(服务器在 HTTP 响应的 Header 中通过 Set-Cookie 字段返回)。常用来实现'身份标识'功能。

    Cookie 是浏览器允许网页在本地硬盘存储数据的一种机制,并非让网页代码直接访问文件系统,而是提供了一层抽象的键值对存储机制。

    Cookie 按照键值对形式存储,每个 Cookie 之间用分号分开。

    文章配图

    通用场景:登录和用户认证。

    文章配图

    在服务器端:

    1. 查询数据库,验证用户名密码是否有效。
    2. 如果匹配成功:
      • 生成 sessionId。
      • 生成 Session 对象。
      • 把用户的关键信息保存到 Session 对象中。
      • 把 sessionId 和 Session 对象作为键值对,保存到内存的 Hash 表中。
      • 把 sessionId 通过 Set-Cookie 返回给浏览器。
    3. 服务器收到后续请求之后,直接通过 Cookie 中的 sessionId 就可以知道当前请求是哪个用户发来的,无需用户重新登录。

    正文 Body

    正文中的内容格式和 Header 中的 Content-Type 密切相关。可通过抓包观察以下几种情况:

    • multipart/form-data

    文章配图

    • application/x-www-form-urlencoded

    文章配图

    • application/json:数据为 JSON 格式。

    文章配图

    • multipart/form-data:Form 表单提交的数据格式(在 form 标签中加上 enctype="multipart/form-data",通常用于提交图片/文件)。

    文章配图

    • application/x-www-form-urlencoded:Form 表单提交的数据格式。

    文章配图

    HTTP 响应

    格式

    响应格式:首行 + 响应头(Header)+ 空行 + 正文(Body)

    状态码 (Status Code)

    状态码表示访问一个页面的结果(成功、失败或其他情况)。

    文章配图

    常见状态码:

    • 200 OK:表示访问成功
    • 404 Not Found:表示访问的资源没找到,URL 输入错了
    • 403 Forbidden:访问被拒绝,没有权限
    • 405 Method Not Allowed:请求方法错了
    • 500 Internal Server Error:服务器错误
    • 504 Gateway Timeout:访问超时。Gateway 表示网关,网络的入口。
    • 302 Move temporary:临时重定向,访问该 URL 会跳转到另一个。

    分类:

    1. 2xx 代表成功
    2. 3xx 代表重定向
    3. 4xx 代表客户端访问出错
    4. 5xx 代表服务器错误

    响应报头 (Header)

    响应报头的基本格式和请求报头的格式基本一致。

    Content-Type 常见取值:

    • text/html:Body 数据格式是 HTML
    • text/css:Body 数据格式是 CSS
    • application/javascript:Body 数据格式是 JavaScript
    • application/json:Body 数据格式是 JSON

    响应正文 (Body)

    正文的具体格式取决于 Content-Type。观察下面几个抓包结果中的响应部分。

    • application/json

    文章配图

    • application/javascript

    文章配图

    • text/css

    文章配图

    • text/html

    文章配图

    目录

    1. HTTP 请求
    2. 请求格式
    3. 首行组成
    4. 请求方法
    5. URL 组成
    6. 请求头(Header)
    7. Host
    8. Content-Length 和 Content-Type
    9. User-Agent (简称 UA)
    10. Referer
    11. Cookie
    12. 正文 Body
    13. HTTP 响应
    14. 格式
    15. 状态码 (Status Code)
    16. 响应报头 (Header)
    17. 响应正文 (Body)

    更多推荐文章

    查看全部
    • GitHub Copilot Plan 模式与 Agent 模式的核心差异解析
    • OpenClaw macOS 安装配置实战:搭建本地 AI 助手
    • Node.js 安装与环境变量配置指南
    • DeepSeek 辅助开发贪吃蛇游戏实战指南
    • LlamaFactory 大模型微调实战指南
    • 数据产品经理与AI产品经理的核心区别与联系
    • MacBook 部署大模型:Ollama 与 llama.cpp 离线方案
    • Spring MVC 核心架构与注解详解
    • 滑动窗口算法实战:最大连续 1 的个数 III 与最小操作数
    • Rock 5B+ RK3588 运行 MAVSDK 控制无人机及 WSL 部署 PX4 与 QGC 方案
    • GitHub Copilot 模型对比与选型策略
    • 渗透测试入门指南:技能、方向与实践
    • Nginx 在 Linux 中的配置及维护指南
    • 基于大模型 API 开发本地 AI 对话应用
    • 23 个 Python 实战项目与源码实例指南
    • Python 真的有必要学吗?基于工作场景的实用性分析
    • 谷歌 Gemini 3 的 6 种免费使用渠道与接入方案
    • JavaScript 触摸事件基础:touchstart、touchmove 和 touchend
    • SeekDB 详解:三行代码构建 AI 原生应用的全能数据库
    • Linux 下使用 Git 克隆 GitHub 项目实战指南

    相关免费在线工具

    • Keycode 信息

      查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

    • Escape 与 Native 编解码

      JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

    • JavaScript / HTML 格式化

      使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

    • JavaScript 压缩与混淆

      Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online