HttpServletRequest的header里到底都有什么值???
这类是开发中根据业务需求添加的头Header 键名示例值含义adminToken后台管理系统的身份令牌token通用的用户身份令牌versionv1.0接口版本号设备类型的 Header 分为通用标准头请求专属头自定义头三类,标准头是 HTTP 协议规定的,自定义头由业务自行定义。(请求体格式)、User-Agent(设备标识)、/ 自定义token(身份认证)、Host(目标主机)。实战技巧:通
·
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"
}
三、注意事项
- Header 名称不区分大小写:
request.getHeader("adminToken")和request.getHeader("admintoken")效果一致,但规范上建议首字母大写(如AdminToken)。 - 多值 Header:部分 Header 可能有多个值(如
Accept),可通过request.getHeaders(String name)获取枚举值。 - 空值处理:若客户端未携带某个 Header,
request.getHeader()会返回null,需做非空判断。 - 跨域场景:自定义 Header(如
adminToken)需在后端配置跨域允许(Access-Control-Allow-Headers),否则浏览器会拦截。
总结
HttpServletRequest的 Header 分为通用标准头、请求专属头、自定义头三类,标准头是 HTTP 协议规定的,自定义头由业务自行定义。- 核心常用头:
Content-Type(请求体格式)、User-Agent(设备标识)、Authorization/ 自定义token(身份认证)、Host(目标主机)。 - 实战技巧:通过
request.getHeaderNames()遍历所有 Header,request.getHeader("键名")获取单个值,可快速排查请求头问题。
更多推荐



所有评论(0)