基本思路是:服务器用一个servlet 捕获请求。用request.getHeader("referer");获取referer字段信息。如果referer不为空,且值是该网站站点。则允许下载并下载相应的文件。如果不符合,则显示提示信息。
但现在问题是:如果我直接在浏览器输入一个url。该url对应web服务器下的一个文件。为了防止盗链,该请求会被上面的servlet捕获到。按照防盗链的原理。该请求将不被接受。实际也是如此。
但有中情况例外,就是客户端有安装迅雷软件时,该软件会提示下载信息。并可以下载该文件。而且请求头中的referer信息也不是为null。
修改服务器端的程序,让它就算是referer值符合要求也不要提供下载。只是简单的提示一下信息。但迅雷还是会根据url的地址去找到该文件,并下载。
请问为什么会这样?
但现在问题是:如果我直接在浏览器输入一个url。该url对应web服务器下的一个文件。为了防止盗链,该请求会被上面的servlet捕获到。按照防盗链的原理。该请求将不被接受。实际也是如此。
但有中情况例外,就是客户端有安装迅雷软件时,该软件会提示下载信息。并可以下载该文件。而且请求头中的referer信息也不是为null。
修改服务器端的程序,让它就算是referer值符合要求也不要提供下载。只是简单的提示一下信息。但迅雷还是会根据url的地址去找到该文件,并下载。
请问为什么会这样?
打印的Referer值是null,程序运行也正常。提示"请先登陆网站后再下载“。
但如果我点击的是“下载”时,获取的Referer居然是我的网站的url。http://localhost:8080/web工程名/.. 这样
的url。
而且就算我在servlet程序中无提供下载文件的代码,他还是可以找到要下载的文件。