今天要谈谈基础知识以外的东西。
比如,未来的某一天,笔者开发了一个很受欢迎的网站,而该网站上的图片、视频非常多。树大招风的原因,经常受到某些人觊觎,不仅想盗取本博主的资源,还想搞点儿事情!
防盗链实现原理:
利用Http协议中的refferer字段,通过Java代码,可以进行防盗判断。
利用nginx可是实现防盗链。
防盗链实现技术代码
其一,利用Nginx可以实现防盗链,在此本文不做过多追叙。
其二,利用Java代码实现防盗链,其实就是在过滤器中,获取请求头字段referer字段进行判断。过滤器在框架中都可以实现,这里简单使用Servlet的过滤器来实现。
还有,字段refferer的含义是:当前请求来自于哪里。当请求URL中不包含referer,则说明图片被盗取,那么这时可以在过滤器中进行恶搞。
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 进行强转 HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; // 获取请求头referer字段 String referer = req.getHeader("referer"); // 获取请求域名 String currentServr = req.getServerName(); // null表示直接引用图片(没有请求Header情况), 没有发起请求 if(referer == null || !referer.contains(currentServr)) { // 防盗处理 req.getRequestDispatcher("...自由发挥, ").forward(req, resp); return ; } chain.doFilter(req, resp); }为什么要禁止浏览器缓存?
试想,每次发生版本更新的时候,客户端可以使用安装包进行更新。那么网站又不能使用安装包进行更新。所以,我们可以在网站发布版本之前,都会在URL请求地址后面加上时间戳进行版本更新。最后,给读者们一个小实践,请打开任意网站和开发者工具,点击network,观察请求中的图片资源,就会发现存在时间撮。