一、referrer
當一個用戶點擊當前頁面中的一個鏈接,然后跳轉到目標頁面時,目標頁面會收到一個信息,即用戶是從哪個源鏈接跳轉過來的。也就是說,當你發起一個http請求,請求頭中的referrer字段就說明了你是從哪個頁面發起該請求的。

二、referrer使用場景
1,隱私
在社交網站的個人中心頁面,也許會存在一些外鏈,這時候社交網站肯定不希望用戶在點擊這些鏈接跳轉到其他第三方網站時會將自己個人中心的URL信息顯示在referrer字段中傳過去,尤其是個人中心頁面的URL往往會帶着用戶數據和一些敏感信息。這時候可以選擇不顯示來源頁面URL信息或者只顯示一個網站根地址hostname。
2,安全
有些使用了https的網站,可能在URL中使用一個參數(sid)來作為用戶身份憑證,而又需要引入其他https網站的資源,這種情況,網站肯定不希望泄露用戶的身份憑證信息。當https網站需要引入不安全的http網站的資源或者有鏈接要跳轉到http網站時,這時候將https源網站的URL信息傳過去也是不太安全的。
當然還有其他情況下需要referrer的值,比如最近公司所做的項目中,有一個請求由於請求頭過大導致響應是400,我們的Referrer Policy是默認的情況,顯示的referrer是完整的URL信息,該URL帶了很多敏感數據比如加密后的token,sessionID等,長度特別長,請求頭中的cookie和請求的URL也帶着很大塊的信息,最終我們決定讓referrer只攜帶網站根地址的信息而不是其完整路徑,由此減小了header的大小。
三、Referrer-Policy
空字符串
若設為空串則默認按照瀏覽器的機制設置referrer的內容,默認情況下是和no-referrer-when-downgrade設置得一樣。
no-referrer
不顯示referrer的任何信息在請求頭中。
no-referrer-when-downgrade
這是默認值。當從https網站跳轉到http網站或者請求其資源時(安全降級HTTPS→HTTP),不顯示referrer的信息,其他情況(安全同級HTTPS→HTTPS,或者HTTP→HTTP)則在referrer中顯示完整的源網站的URL信息。
same-origin
表示瀏覽器只會顯示referrer信息給同源網站,並且是完整的URL信息。所謂同源網站,是協議、域名、端口都相同的網站。
origin
表示瀏覽器在referrer字段中只顯示源網站的源地址(即協議、域名、端口),而不包括完整的路徑。
strict-origin
該策略更為安全些,和origin策略相似,只是不允許referrer信息顯示在從https網站到http網站的請求中(安全降級)。
origin-when-cross-origin
當發請求給同源網站時,瀏覽器會在referrer中顯示完整的URL信息,發個非同源網站時,則只顯示源地址(協議、域名、端口)
strict-origin-when-cross-origin
和origin-when-cross-origin相似,只是不允許referrer信息顯示在從https網站到http網站的請求中(安全降級)。
unsaft-url
瀏覽器總是會將完整的URL信息顯示在referrer字段中,無論請求發給任何網站。
四、前端設置方法
1. 通過Referrer-Policy HTTP header設置:
Referrer-Policy: origin
2. 通過<meta>元素改變Referrer Policy,直接修改名為referrer的內容
<meta name="referrer" content="origin">
3. 給 <a>, <area>, <img>, <iframe>, 或者<link>元素設置referrerpolicy屬性
<a href="http://example.com" referrerpolicy="origin">
4. 如需設置不顯示referrer信息時,也可以給 <a>, <area>, <link>元素設置rel的鏈接關系。
<a href="http://example.com" rel="noreferrer">
