HTTP Referer

什麼是Referer?html

Referer是HTTP請求頭信息裏面的一個常見字段,它提供了訪問來源的信息。好比說,在某網站上看到一個廣告並點了進去,那麼我就可能會在HTTP 協議在請求(request)的頭信息裏面看到Referer這一字段給出「引薦網頁」的URL,讓人知道咱們是經過「某網站」進入的這個廣告頁。瀏覽器

Referer存在的條件服務器

在瀏覽器向服務器請求資源的時候,Referer字段並非老是存在的,其中在如下幾種狀況中會發送Referer字段post

1.點擊網頁上的鏈接網站

2.提交表單(post或get)url

3.網頁加載靜態資源,好比加載圖片、腳本、樣式(js的script標籤及html中img標籤的src屬性)。spa

如下是幾種獲取不到Referer的幾種狀況.net

1.直接在瀏覽器內輸入URLhtm

2.經過瀏覽器內的書籤或收藏blog

3.第三方軟件內容中的鏈接(如Word,Excel等)

4.從HTTPS的網站跳轉到HTTP的網站或SSL認證網站跳入

那麼Referer有什麼做用呢?

1.經過Referer咱們能夠知道訪問來源的信息,因此能夠用來作一些網站流量的來路統計

2.防止圖片盜鏈,當咱們不但願自家網站圖片外鏈被其餘網站加載時,就能夠基於Referer字段來實現,能夠經過判斷該字段是不是自家URL或者是屬於白名單裏的URL若是是則放行容許加載。

3.在某些情境下咱們不但願暴露當前的原始網址,好比一個社交網站會有每一個用戶的簡介頁面,用戶會在他們的我的主頁中添加一些連接。社交網站可能不但願泄露用戶的我的主頁URL給被連接的網站(由於我的主頁URL可能會泄露其主人的身份信息)。
一些社交網站可能想通知其餘網站該連接是從社交網站發起的,但不想泄露包含用戶信息的連接(例如,微博中的連接但願告訴對方該連接是在微博中鏈接過來的,但不但願告訴對方從誰的微博鏈接過來)。

referrer策略

Referrer策略包含如下值:

  1. 空字符串:空字符串表示沒有referrer策略,默認爲no-referrer-when-downgrade。
  2. no-referrer:最簡單的策略是「no-referrer」,表示全部的請求都不帶referrer。
  3. no-referrer-when-downgrade:主要針對於受TLS保護的URL(如https),簡單的說就是https的頁面中,當鏈接的資源也是https的,則發送完整的referrer,若是鏈接的資源是http的,就不發送referrer
  4. same-origin:對於同源的連接,會發送referrer,其餘的不會。
  5. origin:這個策略對於任何資源來講只發送源的信息,不發送完整的url。
  6. strict-origin:這個策略相似於origin和no-referrer-when-downgrade的合體,若是一個https頁面中連接到http的頁面或資源,則不會發送referrer。http頁面連接以及https連接到https都只發送來源頁面的源信息。
  7. origin-when-cross-origin:該策略在同源的連接中發送完整的URL,其餘狀況僅發送源信息。相同的域名,http和https協議被認爲是非同源的。
  8. strict-origin-when-cross-origin:對於同源請求,發送完整的URL;對於同爲https的,只發送源信息;對於http頁面只發送源信息;https頁面中的http請求不發送referrer。
  9. unsafe-url:這個主要是解決https頁面中的http資源不發referrer的問題,它會使在https頁面中http資源發送完整的referrer。

Referrer策略能夠經過如下方法聲明:
1.經過http請求頭中的Referrer-Policy字段,例:Referrer-Policy: no-referrer
2.經過meta標籤,name爲referrer,例:<meta name=」referrer」 content=」no-referrer」 />
3.經過<a>、<area>、<img>、<iframe>、<link>元素的referrerpolicy屬性。例:<a href=「http://example.com」 referrerpolicy=「origin」>
4.經過<a>、<area><link>元素的rel=noreferrer屬性,例:<a href='http://example.com' rel="noreferrer" target="_blank">test</a>
5.經過隱式繼承

注意事項
Referrer策略還有其餘歷史遺留的值:
1.never等價於no-referrer
2.default等價於no-referrer-when-downgrade
3.always等價於unsafe-url
4.不建議使用上面三個值,建議使用後面的新值

兼容性
IE:不支持(IE高版本中隱式支持default,https頁面拉取的http資源不會加referrer)
Edge:僅支持較早版本的值(never、always、origin、default)
Firefox:36+
Chrome:21+
Safari:7.1+(僅支持較早版本的4個值)
Opera:15+
iOS Safari:8+(僅支持較早版本的4個值)

參考:

http://www.ruanyifeng.com/blog/2019/06/http-referer.html

https://blog.lyz810.com/article/2016/08/referrer-policy-and-anti-leech/

https://blog.csdn.net/fjb2080/article/details/80975115

相關文章
相關標籤/搜索