背景
前端js中http跳轉https報403錯誤
window.open('https://xxx.xxx.xxx.xxx:1443')
報錯403錯誤


但是在瀏覽器中直接輸入https地址卻是可以正常訪問的。
問題解決
將服務器上網頁內http跳轉https的request header與瀏覽器直接訪問https地址的request header對比,發現多了一個referer。問題應該就出現在這里,通過以下兩種方式,實現網頁內跳轉不帶referer,成功解決問題。
- window.open('JAVAscript:window.name;','<script>location.replace("https://xxx.xxx.xxx")</script>');
- window.open('https://xxx.xxx.xxx','_blank','noopener,noreferrer,resizable')
思考
1.為什么會出現跳轉時攜帶referer?
我們在從一個網站A點擊鏈接進入另一個網站B頁面時,瀏覽器會在header里加上Referer值,來標識這次訪問的來源頁面。而B網站對Referer進行了攔截導致。
提供三種解決方式
1、在A網站頁面頭部加入下面meta,所有跳轉便不會攜帶referer
<meta name="referrer" content="no-referrer" />
拓展:
same-origin:
對于同源的請求會發送引用地址,但是對于非同源請求則不發送引用地址信息。
比如,www.AAA.com/page1.html 跳轉到 www.AAA.com/page2.html 同源會攜帶 referrer,
www.AAA.com/page1.html 跳轉到 www.BBB.com/page2.html 不同源不會攜帶 referrer,
<meta name="referrer" content="same-origin" />
除了可以設置 no-referrer 和 same-origin 其他 referrer 的設置值可參考:
Referrer-Policy
W3c-Referrer Policy
Remove http referer
2、使用window.open來去除referrer
如果是新頁簽打開:
window.open('JavaScript:window.name;','<script>location.replace("'+你的跳轉url+'")</script>');
如果是新窗口打開:
window.open(你的跳轉url, '_blank', 'noopener,noreferrer,resizable')
3、使用iframe
document.body.AppendChild(document.createElement('iframe')).src='javascript:"<script>top.location.replace(''+你的
2. referer又是什么東西?
HTTP Referer 是 header 的一部分,當瀏覽器向 web 服務器發送請求的時候,一般會帶上 Referer,用來表示從哪兒鏈接到當前的網頁,服務器因此可以獲得一些信息用于處理,采用的格式是 URL。
HTTP Referer 是 header 的一部分,當瀏覽器向 web 服務器發送請求的時候,一般會帶上 Referer,用來表示從哪兒鏈接到當前的網頁,服務器因此可以獲得一些信息用于處理,采用的格式是 URL。

換句話說,借著 HTTP 來源地址,當前的網頁可以檢查訪客從哪里而來,這也常被用來對付偽造的跨網站請求。 而 dereferer 則是將 HTTP 來源地址信息剝離,所以網站將無法識別訪客從何而來。
Referer 的正確英語拼法是 referrer。由于早期 HTTP 規范的拼寫錯誤,為保持向下兼容就將錯就錯了。例如 DOM Level 2、Referrer Policy 等其他網絡技術的規范曾試圖修正此問題,使用正確拼法,導致當前拼法并不統一。
概念與功能
當訪客訪問網頁時,HTTP 來源地址 (referer 或 referring page) 是前一個網頁的 URL。如果是圖片的話,通常指的就是圖片所在的網頁。在網頁瀏覽器送往網頁服務器的時候,HTTP 來源地址就被包含在 HTTP 請求方法中。
網站會將引用地址記錄以便追蹤用戶的動態或進行統計,大部分分析軟件也都會處理這個信息。但因引用地址信息可能會帶來隱私權問題,不少網頁瀏覽器允許用戶設置不要提交這個信息,有些代理服務器和防火墻也會將引用地址信息過濾掉,以避免外部獲知非公開的網絡地址。缺少引用地址信息有可能會造成某些使用問題:某些服務器會因為缺少正確的引用地址信息而進行阻擋,以避免未經授權的圖片引用(圖像防盜鏈)或是其他對服務器有影響的行為。針對這樣的阻擋,有些軟件還提供了針對特定網站提交假來源地址的功能(反防盜鏈)。