java 如何获取header
获取 HTTP Header 的方法
在 Java 中,可以通过不同的方式获取 HTTP 请求的 Header,具体取决于使用的框架或技术。以下是几种常见的方法:
使用 Servlet API
在基于 Servlet 的 Web 应用中,可以通过 HttpServletRequest 对象获取 Header:

import javax.servlet.http.HttpServletRequest;
public void getHeaders(HttpServletRequest request) {
String userAgent = request.getHeader("User-Agent");
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 MVC 中,可以通过 @RequestHeader 注解直接获取 Header:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HeaderController {
@GetMapping("/header")
public String getHeader(@RequestHeader("User-Agent") String userAgent) {
return "User-Agent: " + userAgent;
}
}
使用 Spring WebFlux
在响应式编程的 Spring WebFlux 中,可以通过 ServerRequest 获取 Header:

import org.springframework.web.reactive.function.server.ServerRequest;
import reactor.core.publisher.Mono;
public Mono<String> getHeader(ServerRequest request) {
String userAgent = request.headers().header("User-Agent").get(0);
return Mono.just("User-Agent: " + userAgent);
}
使用 HttpClient
在发送 HTTP 请求时,可以通过 HttpClient 获取响应 Header:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public void getResponseHeaders() throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
response.headers().map().forEach((k, v) -> System.out.println(k + ": " + v));
}
使用 Apache HttpClient
通过 Apache HttpClient 库获取 Header:
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
public void getHeaders() throws Exception {
HttpClient client = HttpClients.createDefault();
HttpGet request = new HttpGet("https://example.com");
HttpResponse response = client.execute(request);
org.apache.http.Header[] headers = response.getAllHeaders();
for (org.apache.http.Header header : headers) {
System.out.println(header.getName() + ": " + header.getValue());
}
}
注意事项
- 确保在获取 Header 时处理可能的
NullPointerException,因为某些 Header 可能不存在。 - 在多线程环境中使用时,注意
HttpServletRequest或ServerRequest的线程安全性。 - 在 Spring 中,
@RequestHeader注解可以设置默认值以避免缺失 Header 的情况:
@RequestHeader(value = "User-Agent", defaultValue = "Unknown") String userAgent
通过以上方法,可以灵活地在不同场景下获取 HTTP Header 信息。






