專案中有個需求,是希望可以知道前一頁的路徑,再來決定這一頁的樣式
這邊我希望可以透過 document.referrer
去取得到前一頁相關的資訊,不過好像跟預期的不太一樣
例如:
document.referrer
是 ''(沒有換Tab)document.referrer
是自己的網址 (有換Tab)請問各位大大,是我的使用方式不對,還是 document.referrer
不是這樣使用呢?
我相信 React 官網不會出現 Vue 官網的連結。
首先,必須要理解如何才能讓瀏覽器發送 Referer 標頭。如果認為 Referer 標頭是上一頁的網址,就大錯特錯了。
只有透過上一頁導向的網頁,瀏覽器才會發送 Referer 標頭至下一頁。
舉例來說,點擊連結、提交表單和引用檔案(如 img
標籤)都能讓當前網頁導向至下一頁,瀏覽器也就會發送 Referer 標頭至下一頁。然而,直接在網址列輸入網址就不行,因為和當前網頁沒有關係。
我想個案應該就是屬於後者,因為無法由 React 官網導向至 Vue 官網(沒有 Vue 官網的連結、表單或檔案)。
順帶一提,如果上一頁的 Referrer-Policy 標頭是 no-referrer 訊息,瀏覽器也不會發送 Referer 標頭至下一頁。
感謝你詳細的回答,不過我想知道如果在react
官網中切換不同章節,為什麼 document.referrer
是 'https://www.google.com/' ?
是因為 domain 沒有變動的情況下,都認定為同一頁嗎?
標頭是網頁的一部分,只有在客戶端發送或伺服器端回應 HTTP 請求時才會有標頭訊息。換句話說,切換章節仍然是在同一頁(沒有載入網頁的行為),因此網頁的標頭也就不會更新。
至於同網域的網頁會發送 Referer 標頭嗎?這個就要視剛才說的 Referrer-Policy 標頭而定。
如果瀏覽器版本較舊(如 Chrome 85 前),瀏覽器預設 Referrer-Policy 標頭為 no-referrer-when-downgrade 訊息,亦即網頁的 Referer 標頭會是上一頁的完整網址(含查詢字串);如果瀏覽器版本較新(如 Chrome 85 後),瀏覽器預設 Referrer-Policy 標頭為 strict-origin-when-cross-origin 訊息,亦即跨網域的網頁只會有上一頁的來源,也就是 HTTP 或 HTTPS 協議、主機名稱(網域名稱或 IP 位址)和連接埠號碼,不會有網頁路徑。