Java如何获取header
获取HTTP请求头的方法
在Java中获取HTTP请求头可以通过不同的方式实现,具体取决于使用的技术栈(如Servlet、Spring等)。以下是几种常见场景下的实现方法:
使用Servlet API获取请求头
在传统的Java Web应用中,可以通过HttpServletRequest对象直接获取请求头信息:
import javax.servlet.http.HttpServletRequest;
public void doGet(HttpServletRequest request, HttpServletResponse response) {
// 获取单个请求头
String userAgent = request.getHeader("User-Agent");
// 获取所有请求头名称
java.util.Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
System.out.println(headerName + ": " + headerValue);
}
}
使用Spring MVC获取请求头
在Spring框架中可以通过注解或HttpHeaders对象获取:
方式1:使用@RequestHeader注解
@GetMapping("/example")
public ResponseEntity<String> example(
@RequestHeader("User-Agent") String userAgent,
@RequestHeader HttpHeaders headers) {
// 使用具体header值
System.out.println("User Agent: " + userAgent);
// 使用HttpHeaders对象
List<String> acceptHeaders = headers.get("Accept");
return ResponseEntity.ok("Header processed");
}
方式2:通过RequestContextHolder获取
ServletRequestAttributes attributes = (ServletRequestAttributes)
RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String authHeader = request.getHeader("Authorization");
使用JAX-RS获取请求头
在JAX-RS(如Jersey)实现中:
@GET
@Path("/headers")
public String getHeaders(@Context HttpHeaders headers) {
MultivaluedMap<String, String> headerMap = headers.getRequestHeaders();
return "Headers: " + headerMap.toString();
}
使用HttpClient发送请求时获取响应头
当使用Apache HttpClient发送HTTP请求时,可以这样获取响应头:

CloseableHttpClient client = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://example.com");
CloseableHttpResponse response = client.execute(httpGet);
Header[] headers = response.getAllHeaders();
for (Header header : headers) {
System.out.println(header.getName() + ": " + header.getValue());
}
注意事项
- 请求头名称是大小写不敏感的,但建议保持一致性
- 某些特殊头(如
Cookie)可能需要通过专用方法获取(如request.getCookies()) - 在多线程环境中使用时需要注意线程安全问题





