禁止浏览器缓存当前文档内容
只要增加如下的响应头字段:
response.setDateHeader("Expires",0);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
不是所有的浏览器都能完全支持上面的三个响应头,因此最好是同时使用上面三个响应头,只有浏览器能支持其中任何一种,就能可靠地禁止浏览器缓存当前页面。
还可以在HTML文档中利用<meta>标签的http-equiv属性来达到这一效果。
<meta http-equiv="Expires" content="0">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Pragma" content="no-cache">
实现动态文件内容下载
1.Servlet程序必须告诉浏览器其说输出的内容的类型不是普通的文本文件或HTML文件,而是一个要保存到本地的下载文件,这就需要通过HttpServletResponse.setContentType方法设置Content-Type头字段的值为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如:“application/octet-stream”或"application/x-msdownload"等。
2.需要通过HttpServletResponse.setHeader方法设置Content-Disposition头的值为"attachment;filename=文件名"。
3.因为附件文件可以是各种类型的文件,要讲附件文件中的内容传送给客户端,其中的内容应被当做二进制处理,所以应该调用HttpServletResponse.getOutputStream方法返回的ServletOutputStream对象来向客户端写入附件文件内容,而不应使用Http
ServletResponse.getWriter方法返回的PrintWriter对象。
利用Referer请求头阻止“盗链”
防止盗链,需要检查请求的来路,只接受本站内的页面链接进来的下载请求,而阻止其他站点的页面链接进来的下载请求。要实现这样的功能,就需要检查请求消息的referer头字段是否与本站匹配。
代码片段:
String referrer = request.getHeader("referer");
String sitePart = "http://" + request.getServerName();
if(referrer!=null && referrer.startsWith(sitePart))
{
//处理下载请求...
}
else
{
//非法下载请求跳转到本站的下载说明页
RequestDispatcher rd = request.getRequestDispatcher("/down.html");
rd.forward(request,response);
}
利用Referer请求头隐藏JavaScript源代码
利用JavaScript可以实现许多网页特效功能,但是,访问者可以轻松查看到所有的JavaScript源代码,即使是把代码放在js文件中也无法保密。如果让js文件通过一个服务器端程序动态创建,结合使用Referer请求头字段就可以防止他人查看到JavaScript源码。
大致原理和上面的防盗链类似
在servlet中加入下面的代码块:
String referrer = request.getHeader("referer");
String sitePart = "http://" + request.getServerName();
response.setContentType("text/javascript;charset=utf-8");
PrintWriter out = response.getWriter();
if(referrer!=null && referrer.startsWith(sitePart))
{
out.println(
//向客户端输出JavaScript的代码块
);
}
在显示页面中要加入JavaScript代码的时候这样设置:
<script type="text/javascript" src="servlet的访问路径">
</script>
有些浏览器在有缓存网页的情况下,还是可以看到JavaScript源码的,只要在servlet代码里加上防止缓存的代码即可。