HTTP 响应协议详解
HTTP 响应结构解析
HTTP 响应由三部分组成:响应行、响应头和响应体。
- 响应行:首行包含协议版本、状态码及描述信息,例如:
HTTP/1.1 200 OK。 - 响应头:以键值对形式定义,用于传递额外的元数据,如内容类型、缓存策略等。每行一个头部字段。
- 响应体:位于响应头之后,通过空行分隔,承载实际返回的数据内容(如 HTML、JSON 等)。
常见状态码分类说明
| 状态码范围 | 含义 | 典型场景 |
|---|---|---|
| 1XX | 信息性状态码 | 表示请求已接收,需客户端继续操作,常用于长连接或升级协议(如 WebSocket 握手)。 |
| 2XX | 成功 | 请求处理完成并成功返回结果,如 200 OK、201 Created。 |
| 3XX | 重定向 | 客户端需发起新的请求,目标地址在响应头中通过 Location 字段指定。例如:
Location 发起下一次请求,用户无感知。
|
| 4XX | 客户端错误 | 请求存在问题,服务端无法处理。如:
|
| 5XX | 服务器错误 | 服务端处理失败。例如:
|
在 Java Web 中操作响应数据
使用 Tomcat 提供的 HttpServletResponse 对象可直接控制响应内容。
@RequestMapping("/redirect")
public void redirectToBaidu(HttpServletResponse response) throws IOException {
// 设置状态码为 302,表示临时重定向
response.setStatus(302);
// 指定跳转目标地址
response.setHeader("Location", "https://www.baidu.com");
// 写入响应体(必须通过流输出)
response.getWriter().write("<h1>正在跳转至百度...</h1>");
}
使用 Spring Framework 的 ResponseEntity 更高效
Spring 框架提供的 ResponseEntity<T> 提供了更简洁的构建方式,支持链式调用设置状态码、头部与响应体。
@RequestMapping("/spring-response")
public ResponseEntity<String> springRedirect() {
return ResponseEntity.status(307)
.header("Location", "https://www.baidu.com")
.body("<h1>Spring 响应示例</h1>");
}
注意:通常情况下,状态码和响应头由框架根据业务逻辑自动推断生成,手动设置仅在特殊需求时使用。