【HTTP 请求消息头】

1
2
3
4
5
6
7
8
9
10
11
(Request-Line)     GET /manager/html HTTP/1.1    请求行
下面是消息头
Accept */*
Accept-Encoding gzip, deflate 可以接收gzip文件,或者默认
Accept-Language zh-CN 支持中文
Connection Keep-Alive 保存常连接
Host 127.0.0.1:8080
Referer http://127.0.0.1:8080/ 告诉服务器我来自哪里?可以防盗链
User-Agent Mozilla/4.0 浏览器内核
(空行)
内容
  • Servlet 中获取头信息 –> String host = request.getHeader(“HOST”);
  • 可以通过获取 Referer 信息,来判断用户是从那个页面跳转过来的,来防止盗链
  • 直接 在浏览器输入 跳转过来,Referer 的值为 null

【HTTP 响应消息头】

  • Location 用于重定向,向浏览器发送一个新 URI 地址。
1
2
response.setStatus(302);
response.setHeader("Location","URL");
  • Content-Disposition 用于下载文件
1
2
3
4
5
6
7
8
9
10
11
// 设置消息头 下载
response.setHeader("Content-Disposition", "attachment;filename=test.jpg"); /* 1.读文件 */ // 获取文件全路径 String path =
getServletContext().getRealPath("/images/test.jpg"); // 创建一个文件输入流
FileInputStream fis = new FileInputStream(path);
// 缓冲区
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0)
/* 2.写文件 */
out.write(buffer, 0, length);
}

通过合适地设置 Content-disposition 的值,Servlet 能指示浏览器是“内嵌”显示文件还是把它当作附件处理。

  1. 内嵌显示一个文件 Content-disposition: inline; filename=foobar.pdf
  2. 往 response 里附加一个文件 Content-disposition: attachment; filename=foobar.pdf
  • Expires 应该在什么时候认为文档已经过期,从而不再缓存它?
1
2
3
4
5
6
7
8
// 设置页面不缓存
response.setDateHeader("Expires",-1); //-1则表示不缓存(IE)
// 下面两句代码是为了兼容性
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");

//设置页面缓存一定时间
response.setDateHeader("Expires", System.currentTimeMillis()+3600*1000*24); // 缓存一天