Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

瀏覽器與 HTTP Referer 之間的特性

Posted on 2014 年 4 月 23 日2022 年 7 月 16 日 By 日落 在〈瀏覽器與 HTTP Referer 之間的特性〉中尚無留言

在無限期鬼打牆以後,才發現 HTTP Referer 不一定真的代表參考位址。

假設有三個頁面:

  1. form.html:填資料
  2. proccess.php:處理表單內容
  3. showError.php:表單內容有誤時,重新導向到這一頁

一般情況下 process.php 的 referer 會是 form.html、showError.php 的 referer 會是 process.php,但若 proccess.php 跳轉頁面是這樣寫:

if( ERROR ){
   header('Location: showError.php');
}

執行後 HTTP server 的回應會是 HTTP 302 而非 HTTP 200,瀏覽器不會將 302 視為正常的瀏覽行為,所以 proccess.php 不會被列入正式瀏覽記錄,當重新導向到 showError.php 時,Refer 仍然會是最後一個正式的瀏覽記錄,也就是 form.html。

若希望讓 showError.php 可以正確知道是哪一頁連過來的,就得靠其他方法了。

在這裡建議不要使用 HTTP Referer 來做判斷的依據。現有瀏覽器開發工具、外掛都可以讓人任意修改 Referer,也聽說有些防毒軟體會固定將 Referer 從 HTTP request 中刪除,再者,各家瀏覽器送 Referer 的情況也不同 (IE MUST DIE),用 Referer 判斷流程等方法會遇到不少例外情況要處理,別讓自己那麼累。

Reference:
php – HTTP_REFERRER and Location redirect – Stack Overflow

Tags:Web

文章導覽

Previous Post: 將資料同步至 AWS S3
Next Post: HTML 超連結特殊字元的 escape

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.