場景描述:請(qǐng)求其他服務(wù)器上的數(shù)據(jù)時(shí)涧窒,圖片均訪問不到,狀態(tài)碼是403锭亏,但是雙擊圖片可以看到或者是賦值圖片鏈接也可以看到纠吴。
解決方法
在html
頁面中添加一個(gè)頭信息
<meta name='referer' content='no-referer'>
原理是
發(fā)送請(qǐng)求時(shí)在請(qǐng)求頭中隱藏refer
字段
http請(qǐng)求頭中的refer字段
http請(qǐng)求體的header中有一個(gè)referrer字段,用來表示發(fā)起http請(qǐng)求的源地址信息慧瘤,這個(gè)
referrer
信息是可以省略但是不可修改的戴已,就是說你只能設(shè)置是否帶上這個(gè)referrer信息,不能定制referrer里面的值锅减。服務(wù)器端在拿到這個(gè)referrer值后就可以進(jìn)行相關(guān)的處理糖儡,比如圖片資源,可以通過referrer值判斷請(qǐng)求是否來自本站怔匣,若不是則返回403或者重定向返回其他信息握联,從而實(shí)現(xiàn)圖片的防盜鏈。上面出現(xiàn)403就是因?yàn)槊柯鳎?qǐng)求的是別人服務(wù)器上的資源金闽,但把自己的referrer信息帶過去了,被對(duì)方服務(wù)器攔截返回了403剿骨。
在前端可以通過meta來設(shè)置referrer policy(來源策略)代芜,具體可以設(shè)置哪些值以及對(duì)應(yīng)的結(jié)果參考這里。所以針對(duì)上面的403情況的解決方法浓利,就是把referrer設(shè)置成
no-referrer
挤庇,這樣發(fā)送請(qǐng)求不會(huì)帶上referrer信息,對(duì)方服務(wù)器也就無法攔截了荞膘。
另一種解決辦法
瀏覽器中referrer默認(rèn)的值是no-referrer-when-downgrade
罚随,就是除了降級(jí)請(qǐng)求的情況以外都會(huì)帶上referrer信息。降級(jí)請(qǐng)求是指https協(xié)議的地址去請(qǐng)求http協(xié)議羽资,所以上面403的情況還有另一種解決方法就是淘菩,請(qǐng)求的圖片地址換成http協(xié)議,自己的地址使用https協(xié)議,這樣降級(jí)請(qǐng)求也不會(huì)帶上referrer潮改。
參考鏈接: