目标

一、Http 头信息
HTTP 头(Header)是一种附加内容,独立于请求内容和响应内容。
HTTP 协议中的大量特性都通过Header信息交互来实现,比如内容编解码、缓存、连接保活等等。
如下面的一个请求响应:
Request
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Host: www.cnblogs.com
If-Modified-Since: Wed, 18 Jul 2018 13:47:45 GMT
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
| 名称 | 用途 |
|---|---|
| Accept | 客户端期望的MIME 类型列表 |
| Accept-Encoding | 客户端期望的编解码方式 |
| Accept-Language | 客户端期望的语言 |
| Cache-Control | 缓存控制 |
| Connection | 连接行为(keep-alive) |
| Host | 请求访问的主机 |
| If-Modified-Since | 缓存控制 |
| Upgrade-Insecure-Requests | 支持安全加密标记 |
| User-Agent | 用户代理(客户端标识) |
Response
Cache-Control: private, max-age=10
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 18 Jul 2018 13:47:51 GMT
Expires: Wed, 18 Jul 2018 13:48:01 GMT
Last-Modified: Wed, 18 Jul 2018 13:47:51 GMT
Transfer-Encoding: chunked
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN
X-UA-Compatible: IE=10
| 名称 | 用途 |
|---|---|
| Cache-Control | 缓存控制 |
| Connection | 连接行为(keep-alive) |
| Content-Encoding | 编解码方式 |
| Content-Type | 内容类型(MIME) |
| Date | 当前响应时间 |
| Expires | 文档过期时间 |
| Last-Modified | 最后一次更新时间 |
| Transfer-Encoding | 传输编码方式 |
| Vary | 需要刷新的请求Header |
| X-Frame-Options | FRAME展示策略(用于同源控制) |
| X-UA-Compatible | IE兼容属性 |
更多的** Http Header **可以从这里找到
二、SpringBoot 处理头信息
前面的内容中已经讲过如何完成Controller方法及请求的映射。
在SpringBoot可通过@RequestHeader注解方式
将请求头信息映射到参数,如下面的片段:
@GetMapping("/some")
@ResponseBody
public String someHeader(@RequestHeader(value = "Host") String host,
@RequestHeader(value = "User-Agent") String userAgent,
@RequestHeader(value = "Cache-Control", required = false) String cacheControl,
HttpServletResponse response) {
logger.info("host:{}", host);
logger.info("User-Agent:{}", userAgent);
logger.info("Cache-Control:{}", cacheControl);
// 设置响应头
response.setHeader("Cache-Control", "no-cache,no-store,must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
return "OK";
}