解决防盗链导致图片无法引用的问题

很多网站都有反盗链机制,当我们直接把对方的图片地址贴到我们的页面上是无法显示的,比如微信公众号的图片:

image

这是由于浏览器在发起请求的会自动在请求头里添加referer,显示该请求来自哪个页面。对方服务器会对referer进行判断,来自其他域名的请求会被屏蔽。而直接通过浏览器打开的请求则不会添加referer,为了用户正常使用,一般不会屏蔽空referer的请求,因此我们只需要在请求中想办法去掉referer即可正常显示图片。以下两个是我亲测可行的方案。

HTML页面添加meta标签

在需要去除referer的页面中添加<meta name="referrer" content="never">,注意name为referrer不是referer,将content设为never,则浏览器在发起请求前会删除http请求head中的referer。关于referer更多设置的值可以参考该文章:《使用 Referer Meta 标签控制 referer》

服务器转发请求

上面方法比较简单直接,但并不是所有时候都适用,比如在邮件中则无法显示,因为邮件服务商一般都会删除邮件中的标签。

该方法是将原图片的url作为参数传到服务器,由服务器设置referer为null,并302重定向到原来的url。

服务器端的代码如下:

1
2
3
4
5
6
@RequestMapping("noreferer")
public void noreferer(HttpServletResponse response, String url){
response.addHeader("location",url);
response.addHeader("referer",null);
response.setStatus(302);
}

修改html页面的img标签,如:<img src="http://原图片url"> 改为:<img src="http:你服务器地址/noreferer?url=http://原图片url"