如何使用防盜鏈圖片

背景

最近自己寫了一個網(wǎng)站玩就轧,在引用別人網(wǎng)站的圖片是遇到了一些小問題豌鹤。

<img src="https://xxxx" alt="">

像這個樣子,src后面跟的是別的網(wǎng)站的圖片的url叫倍。

問題

有的圖片在我們發(fā)布的網(wǎng)站上能正常加載出來,有的一些就加載不出來豺瘤,審查一下元素吆倦,會看到Failed to load resource: the server responded with a status of 403 ()的報錯。

發(fā)現(xiàn)和解決問題

經(jīng)過了解坐求,發(fā)現(xiàn)這是一個叫做防盜鏈的東西蚕泽,網(wǎng)站設(shè)置了防盜鏈的策略,會在后臺判斷請求的Referrer屬性是不是來自于一個非本域名的網(wǎng)站桥嗤,如果來源不是本域名就返回403 forbidden须妻。我們要做的就是用最方便的方法使得我的頁面能夠不受他的防盜鏈策略的影響。我從網(wǎng)上搜到了幾個解決方法泛领。

圖片預下載

這個是最直觀的解決方式了荒吏,正在使用別人的圖,先把圖片下載下來渊鞋,保存到自己的服務(wù)器上绰更,然后就等于是用自己的了~ 如果自己沒有服務(wù)器,可以去網(wǎng)上找找圖床锡宋,應該也能解決問題儡湾。

刪除Header中的Referrer

保證最佳效果的最簡單的寫法就是在html文件的head中添加一個meta標簽<meta name="referrer" content="never" />

為什么叫保證效果的最簡單寫法 ?下面看一些數(shù)據(jù)對比执俩。

刪除Header中的Referrer的方法也有多種:添加meta標簽添加ReferrerPolicy屬性

添加meta標簽

一種方法是給頁面添加一個meta標簽盒粮,在meta標簽里指定referrer的值,比如<meta name="referrer" content="xxx" />奠滑。網(wǎng)上可以查到各種奇奇怪怪的值丹皱,其實我總結(jié)了來源于兩個地方。
一個是來自whatwg的標準宋税。他給meta標簽的referrer屬性定義了四個值:never,always,origin,default摊崭。如果需要關(guān)閉referrer,就將referrer的值設(shè)置成”never”杰赛。這個標準還是比較老的呢簸,而且在他的主頁上也明確寫了”This document is obsolete(廢棄的).”。不過據(jù)我調(diào)研,或許正是由于這個標準比較老根时,反而導致絕大多數(shù)瀏覽器對他的支持都很好瘦赫,因禍得福蛤蛤。
另外一個是來自MDN的標準蛤迎。他給meta標簽的referrer屬性定義了五個值确虱,如果要關(guān)閉referrer,就將它的值設(shè)置成no-referrer替裆。

不過我們需要注意的是校辩,meta標簽添加的位置也很重要,有的瀏覽器能夠識別非head標簽中的meta標簽辆童,有的就不行宜咒。在實際使用的時候還要小心,這一點下文會有一個更具體的比較把鉴。

添加ReferrerPolicy屬性

添加meta標簽相當于對文檔中的所有鏈接都取消了referrer故黑,而ReferrerPolicy則更精確的指定了某一個資源的referrer策略。關(guān)于這個策略的定義可以參照MDN庭砍。比如我想只對某一個圖片取消referrer场晶,如下編寫即可:

<img src="xxxx.jpg"  referrerPolicy="no-referrer" />
nothing meta in head referrer=never meta in head referrer=no-referrer meta referrer=never meta referrer=no-referrer img referrerPolicy=no-referrer
Chrome N Y Y Y Y Y
Firefox N Y Y N N Y
Edge/IE N Y N Y N N

可以看出Chrome瀏覽器對各種寫法都支持的最好。Firefox支持所有標準的寫法逗威,但是不支持沒有寫在head標簽中的meta標簽峰搪;Edge/IE則不支持MDN里定義的”no-referrer”配置項,果然是個古董凯旭。概耻。。

總的來說罐呼,保證最佳效果的最簡單的寫法就是添加一個meta標簽<meta name="referrer" content="never" />鞠柄,這樣就不用考慮瀏覽器的差別了,雖然這種寫法并不被官方推薦(主要還是要遷就IE這個古董嫉柴,放棄了理論上更為正確的標準)厌杜。

使用iframe

這個圖片就是使用了防盜鏈的http://json.image.alimmdn.com/vsou.png

  1. 建一個空的iframe
  2. iframe設(shè)置src,內(nèi)容就是圖片或一段html
var body = document.querySelector("body");
var iframe = document.createElement("iframe");
var html = '<img src="http://json.image.alimmdn.com/vsou.png"/>';
iframe.src = 'javascript:void(function(){document.open();document.write(\'' + html + '\');document.close();}())';
body.appendChild(iframe);

略微設(shè)置一下樣式

iframe.style.position="fixed";
iframe.style.width="100%";
iframe.style.height="100%";
iframe.style.border=0;
iframe.style.zIndex=10;
iframe.style.top=0;
iframe.style.left=0;

上面一段代碼有一個關(guān)鍵因素计螺,就是在iframe之外夯尽,不能有任何其他圖片該域名(示例圖片所在域名)下的圖片,否則功虧一簣

上面的解釋是從網(wǎng)上搜到的登馒,沒有什么問題匙握,總結(jié)起來方法就是我們創(chuàng)建一個iframe,然后把我們要顯示的帶有防盜鏈圖片鏈接的html標簽陈轿,以字符換的形式傳給iframe的src屬性就行了圈纺。

不過這個方法是有問題的秦忿,因為iframe設(shè)置width和height都無效,所以用在我的網(wǎng)站上樣式是不合適的蛾娶。具體為什么這樣灯谣,大家可以查一下iframe,具體的了解一下蛔琅。

參考

https://juejin.im/entry/5adaa72c6fb9a07aa43bc665
https://segmentfault.com/a/1190000004968720

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胎许,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子揍愁,更是在濱河造成了極大的恐慌呐萨,老刑警劉巖杀饵,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莽囤,死亡現(xiàn)場離奇詭異,居然都是意外死亡切距,警方通過查閱死者的電腦和手機朽缎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谜悟,“玉大人话肖,你說我怎么就攤上這事∑闲遥” “怎么了最筒?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔚叨。 經(jīng)常有香客問我床蜘,道長,這世上最難降的妖魔是什么蔑水? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任邢锯,我火速辦了婚禮,結(jié)果婚禮上搀别,老公的妹妹穿的比我還像新娘丹擎。我一直安慰自己,他們只是感情好歇父,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布蒂培。 她就那樣靜靜地躺著,像睡著了一般榜苫。 火紅的嫁衣襯著肌膚如雪护戳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天单刁,我揣著相機與錄音灸异,去河邊找鬼府适。 笑死,一個胖子當著我的面吹牛肺樟,可吹牛的內(nèi)容都是我干的檐春。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼么伯,長吁一口氣:“原來是場噩夢啊……” “哼疟暖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起田柔,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤俐巴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后硬爆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欣舵,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年缀磕,在試婚紗的時候發(fā)現(xiàn)自己被綠了缘圈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡袜蚕,死狀恐怖糟把,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情牲剃,我是刑警寧澤遣疯,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站凿傅,受9級特大地震影響缠犀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狭归,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一夭坪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧过椎,春花似錦室梅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至敷待,卻和暖如春间涵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榜揖。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工勾哩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抗蠢,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓思劳,卻偏偏與公主長得像迅矛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子潜叛,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5秽褒? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,513評論 1 45
  • HTML標簽解釋大全 一威兜、HTML標記 標簽:!DOCTYPE 說明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,256評論 1 41
  • 一個圖片销斟,本站或者外站,都要想辦法拿到 前言介紹 近期在一個項目中椒舵,需要引用大量外部網(wǎng)站的圖片蚂踊,竟意外的發(fā)現(xiàn)在生成...
    lancelot_lewis閱讀 6,136評論 0 3
  • HTML基礎(chǔ) 本文包括 HTML基本知識與結(jié)構(gòu) HTML常見標簽 標簽寫法與嵌套的討論 HTML、CSS逮栅、java...
    廖少少閱讀 2,088評論 2 21
  • Mac上提高效率的軟件 Xmind XMind 是一個全功能的思維導圖和頭腦風暴軟件悴势,為激發(fā)靈感和創(chuàng)意而生窗宇。作為一...
    二斤寂寞閱讀 356評論 0 0