調(diào)用外部鏈接躲叼,報403錯誤
背景:在開發(fā)一個視頻播放項目中video_ts(一個用typescript開發(fā)的視頻播放器)中調(diào)用MP4 資源的時候,無法播放企巢,報403錯誤枫慷。然而直接在瀏覽器地址欄回車則可以正常播放。
報403錯誤則是訪問被拒絕浪规,既然我做了跨域處理還被拒絕這里就要提及瀏覽器的防盜鏈機(jī)制或听。
防盜鏈機(jī)制
當(dāng)你的項目和需要訪問的地址不在同一個域內(nèi),這時瀏覽器的防盜鏈機(jī)制就發(fā)揮作用了笋婿。其中防盜鏈?zhǔn)抢?HTTP header 中的 referer 來實現(xiàn)的誉裆。當(dāng)瀏覽器向服務(wù)器發(fā)送請求時會帶上 referer ,來告訴服務(wù)器從哪個頁面鏈接過來的缸濒。
服務(wù)器通過識別 referer 來判斷請求是否是自己的域名足丢,如果不是自己的域名就會攔截,不會將請求發(fā)送出去庇配,如果是自己域名就可以繼續(xù)訪問斩跌。
請求發(fā)送成功的請求頭:
請求未發(fā)送成功的請求頭:(會有Referer字段)
解決方法
這里我采用的是比較暴力的方法,直接在標(biāo)簽里加 meta
<meta name="referrer" content="never">
在某些情況網(wǎng)站想要控制頁面發(fā)送給服務(wù)器的 referer 信息時捞慌,可以使用 referer metadata 參數(shù)耀鸦。
referer 的 metadata 屬性可以設(shè)置 content 屬性值為以下:
default
never
always
origin
default :若當(dāng)前頁面使用的是 https 協(xié)議,而正要加載資源使用的是普通的 http 協(xié)議卿闹,則將 http header 中的 referer 置空揭糕;
never :刪除 http header 中的 referer,所有從當(dāng)前頁面發(fā)起的請求將不會攜帶 referer锻霎;
always :不改變 http header 中的 referer 的值著角;
origin :只發(fā)送 origin 部分;