HttpServletRequest 是 Java Web 中获取 HTTP 请求头的核心对象,其 Header 内容由客户端(浏览器 / Postman / 前端代码)发起请求时携带,核心可分为通用标准头请求专属头自定义头三类。

如果想了解HttpServletRequest请求可以看上一篇文章
HttpServletRequestl类的常用方法

一、HttpServletRequest Header 的核心分类及常见值

HttpServletRequest 的 Header 本质是一组键值对(Key-Value),通过 request.getHeader("Key") 即可获取对应值,常见的 Header 如下

1、标准请求头(所有 HTTP 消息都可能包含)

Header 键名 示例值 含义
Date Fri, 30 Jan 2026 10:00:00 GMT 请求发送的时间(GMT 格式)
Cache-Control no-cache, max-age=0 缓存控制策略(是否缓存、缓存时长)
Connection keep-alive / close 连接方式(长连接 / 短连接)
Content-Length 1024 请求体的字节长度(仅 POST/PUT 等有请求体的请求)
Content-Type application/json;charset=UTF-8 application/x-www-form-urlencoded multipart/form-data 请求体的格式(核心!决定后端如何解析参数)

2、请求专属头(仅 HTTP 请求包含)

Header 键名 示例值 含义
Host localhost:7070 请求的目标主机(域名 + 端口)
User-Agent(UA) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 … Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) … 客户端标识(浏览器 / 手机型号 / 系统版本,用于判断设备类型)
Accept application/json, text/html, / 客户端可接受的响应数据格式
Accept-Encoding gzip, deflate, br 客户端支持的压缩方式
Accept-Language zh-CN,zh;q=0.9,en;q=0.8 客户端偏好的语言
Referer http://localhost:7070/admin/login 请求的来源页面(防盗链常用)
Authorization Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9… 身份认证信息(如 JWT Token)
Cookie JSESSIONID=6E8F9A7B; adminToken=a26377bd… 客户端存储的 Cookie 信息
Origin http://localhost:8080 请求的源域名(跨域请求时核心头)
3. 自定义头(业务场景自行定义)

这类是开发中根据业务需求添加的头

Header 键名 示例值 含义
adminToken a26377bd-2dab-4ef7-ae0e-1c28efaca2c6 后台管理系统的身份令牌
token / access-token xxx-xxx-xxx 通用的用户身份令牌
version v1.0 接口版本号
device-type mobile / pc 设备类型

二、实战:获取 HttpServletRequest 所有 Header 的代码示例

如果你想在 Java Web 项目中查看当前请求的所有 Header,可通过以下代码遍历(Servlet/Controller 中均可使用)

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;

// 示例:在 Spring MVC Controller 中获取所有 Header
@RestController
@RequestMapping("/test")
public class HeaderTestController {

    @GetMapping("/getAllHeaders")
    public Map<String, String> getAllHeaders(HttpServletRequest request) {
        Map<String, String> headerMap = new HashMap<>();
        
        // 获取所有 Header 名称的枚举
        Enumeration<String> headerNames = request.getHeaderNames();
        
        // 遍历所有 Header,存入 Map
        while (headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            // 获取单个 Header 值(多个值用逗号分隔)
            String headerValue = request.getHeader(headerName);
            headerMap.put(headerName, headerValue);
        }
        
        return headerMap; // 返回所有 Header 键值对
    }
}
测试效果

访问 http://localhost:7070/test/getAllHeaders(可在 Postman 中添加 adminToken 自定义头),返回结果示例:

{
  "Host": "localhost:7070",
  "User-Agent": "PostmanRuntime/7.37.0",
  "Accept": "*/*",
  "Accept-Encoding": "gzip, deflate, br",
  "Connection": "keep-alive",
  "adminToken": "a26377bd-2dab-4ef7-ae0e-1c28efaca2c6"
}

三、注意事项

  1. Header 名称不区分大小写request.getHeader("adminToken")request.getHeader("admintoken") 效果一致,但规范上建议首字母大写(如 AdminToken)。
  2. 多值 Header:部分 Header 可能有多个值(如 Accept),可通过 request.getHeaders(String name) 获取枚举值。
  3. 空值处理:若客户端未携带某个 Header,request.getHeader() 会返回 null,需做非空判断
  4. 跨域场景:自定义 Header(如 adminToken)需在后端配置跨域允许(Access-Control-Allow-Headers),否则浏览器会拦截。

总结

  1. HttpServletRequest 的 Header 分为通用标准头请求专属头自定义头三类,标准头是 HTTP 协议规定的,自定义头由业务自行定义。
  2. 核心常用头:Content-Type(请求体格式)、User-Agent(设备标识)、Authorization/ 自定义 token(身份认证)、Host(目标主机)。
  3. 实战技巧:通过 request.getHeaderNames() 遍历所有 Header,request.getHeader("键名") 获取单个值,可快速排查请求头问题。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐