通過瀏覽多方文章,找到了一個 非常好用但是也有很大的坑的辦法:
在頁面中加meta:
<meta name="referrer" content="never">
親測遇到的坑:
首先,微信復制的圖片,自己網站作為引用,在pc端任何地方都顯示:"本圖片來自微信公眾號,未經許可,不能引用..."之類的字樣在安卓ap端其實是可以正常顯示的,在ios的app端顯示為空白
當加了該meta之后,在pc所有地方都可以正常顯示了,但是ios的app端依然顯示為空白......所以使用該方法如果僅限於在pc端的話,,沒毛病.
這里了解一下referer是什么:
referrer 屬性可返回載入當前文檔的文檔的 URL。
如果當前文檔不是通過超級鏈接訪問的,則為 null。這個屬性允許客戶端 JavaScript 訪問 HTTP 引用頭部。
referer 的 metedata 參數可以設置為以下幾種類型的值:
never
always
origin
default
如果在文檔中插入 meta 標簽,並且 name 屬性的值為 referer,瀏覽器客戶端將按照如下步驟處理這個標簽:
1.如果 meta 標簽中沒有 content 屬性,則終止下面所有操作
2.將 content 的值復制給 referrer-policy ,並轉換為小寫
3.檢查 content 的值是否為上面 list 中的一個,如果不是,則將值置為 default
上述步驟之后,瀏覽器后續發起 http 請求的時候,會按照 content 的值,做出如下反應(下面 referer-policy 的值即 meta 標簽中 content 的值):
1.如果 referer-policy 的值為never:刪除 http head 中的 referer;
2.如果 referer-policy 的值為default:如果當前頁面使用的是 https 協議,而正要加載的資源使用的是普通的 http 協議,則將 http header 中的 referer 置為空;
3.如果 referer-policy 的值為 origin:只發送 origin 部分;
4.如果 referer-policy 的值為 always:不改變http header 中的 referer 的值,注意:這種情況下,如果當前頁面使用了 https 協議,而要加載的資源使用的是 http 協議,加載資源的請求頭中也會攜帶 referer。
例子
如果頁面中包含了如下 meta 標簽,所有從當前頁面中發起的請求將不會攜帶 referer:
<meta name="referrer" content="never">
如果頁面中包含了如下 meta 標簽,則從當前頁面中發起的 http請求將只攜帶 origin 部分(注:根據原文中的語境,我理解這里的 origin 是包含了 schema 和 hostname 的部分 url,不包含 path 等后面的其他 url 部分),而不是完整的 URL :
<meta name="referrer" content="origin">
注意:在使用本文中所述的 meta 標簽的時候,瀏覽器原有的 referer 策略將被打破,比如從 http 協議的頁面跳轉到 https 的頁面的時候,如果設置了適當的值,也會攜帶 referer。
此段摘自:http://www.freebuf.com/news/57497.html
反盜鏈的原理
官方輸出圖片的時候,判斷了來源(Referer),就是從哪個網站訪問這個圖片,如果是你的網站去加載這個圖片,那么Referer就是:你的網站地址;;你網站地址,肯定沒在官方的白名單內,所以就看不到圖片了。
不發送Referer,也就是沒有來源。那么官方那邊,就認為是從瀏覽器直接訪問的,所以就能加載正常的圖片了。