http headers之origin,host和referer的區(qū)別

Host - 請(qǐng)求頭

指明了請(qǐng)求的服務(wù)器的域名/ip 地址和端口號(hào)

組成:域名+端口號(hào)

如果沒有給定端口號(hào),會(huì)自動(dòng)使用被請(qǐng)求服務(wù)的默認(rèn)端口(比如請(qǐng)求一個(gè) HTTP 的 URL 會(huì)自動(dòng)使用 80 端口)。

HTTP/1.1 的所有請(qǐng)求報(bào)文中必須包含一個(gè) Host 頭字段。如果一個(gè) HTTP/1.1 請(qǐng)求缺少 Host 頭字段或者設(shè)置了超過一個(gè)的 Host 頭字段,一個(gè) 400(Bad Request)狀態(tài)碼會(huì)被返回。

用途

主要應(yīng)用在虛擬主機(jī)技術(shù)上。同一個(gè) IP 也可以設(shè)置多個(gè)不同站點(diǎn),那么訪問不同的域名都轉(zhuǎn)發(fā)到同一 IP ,怎么區(qū)分這些不同的站點(diǎn)呢,就是用的 Host 字段。這樣每次訪問都會(huì)根據(jù)不同的 Host 的信息請(qǐng)求到不同的站點(diǎn)上面。

比如說有一臺(tái) ip 地址為 11.11.11.11 的服務(wù)器,在這臺(tái)服務(wù)器上部署著淘寶、京東、拼多多的網(wǎng)站,并且配置了三個(gè)虛擬主機(jī):a.com, b.com, c.com, 這三個(gè)域名都指向 11.11.11.11。 當(dāng)我們?cè)L問 c.com 的網(wǎng)站時(shí),看到的是拼多多的頁面而不是淘寶和京東的頁面,原因就是 Host 請(qǐng)求頭決定著訪問哪個(gè)虛擬主機(jī)。

referer - 請(qǐng)求頭

Referer 首部包含了當(dāng)前請(qǐng)求頁面的來源頁面的地址,即表示當(dāng)前頁面是通過此來源頁面里的鏈接進(jìn)入的。

組成:協(xié)議+域名+端口號(hào)+路徑+參數(shù)(注意,不包含 hash 值)

需要注意的是 referer 實(shí)際上是 "referrer" 誤拼寫。

在以下幾種情況下,Referer 不會(huì)被發(fā)送:

  • 來源頁面采用的協(xié)議為表示本地文件的 "file" 或者 "data" URI;
  • 當(dāng)前請(qǐng)求頁面采用的是非安全協(xié)議,而來源頁面采用的是安全協(xié)議(HTTPS);
  • 直接輸入網(wǎng)址或通過瀏覽器書簽訪問;
  • 使用 JavaScript 的 Location.href 或者是 Location.replace();
  • 使用 html5 中 noreferrer

用途

服務(wù)端一般使用 Referer 首部識(shí)別訪問來源,可能會(huì)以此進(jìn)行統(tǒng)計(jì)分析、日志記錄以及緩存優(yōu)化等,還有個(gè)常見的用途是圖片防盜鏈。

防盜鏈原理是:當(dāng)用戶訪問網(wǎng)頁時(shí),referer 就是前一個(gè)網(wǎng)頁的 URL;如果是圖片的話,通常指的就是圖片所在的網(wǎng)頁。當(dāng)瀏覽器向服務(wù)器發(fā)送請(qǐng)求時(shí),referer 就自動(dòng)攜帶在 HTTP 請(qǐng)求頭了。圖片服務(wù)器根據(jù)這個(gè)請(qǐng)求頭判斷,如果 referer 不是自己的服務(wù)器,就將其攔截。

但是 referrer 存在很多問題。比如說在請(qǐng)求外部網(wǎng)站的時(shí)候,攜帶著 url 的很多參數(shù)信息,而這些信息實(shí)際上是隱私的,所以存在一定的隱私暴露風(fēng)險(xiǎn)。 下面的 origin 就不存在這種隱私問題。

origin - 請(qǐng)求頭

請(qǐng)求首部字段 Origin 指示了請(qǐng)求來自于哪個(gè)站點(diǎn)。該字段僅指示服務(wù)器名稱,并不包含任何路徑信息。除了不包含路徑信息,該字段與 Referer 首部字段相似。

該首部用于 CORS 請(qǐng)求或者 POST 請(qǐng)求。

組成:協(xié)議+域名+端口號(hào)

注意:只有跨域請(qǐng)求(可以看到 response 有對(duì)應(yīng)的 header:Access-Control-Allow-Origin),或者同域時(shí)發(fā)送 post 請(qǐng)求,才會(huì)攜帶 origin 請(qǐng)求頭。
如果瀏覽器不能獲取請(qǐng)求源,那么 origin 滿足上面情況也會(huì)攜帶,不過其值為 null。
而 referer 不論何種情況下,只要瀏覽器能獲取到請(qǐng)求源都會(huì)攜帶。如果瀏覽器如果不能獲取請(qǐng)求源,那么請(qǐng)求頭中不會(huì)攜帶 referer。

用途

用于 CORS: 當(dāng)我們的瀏覽器發(fā)出跨站請(qǐng)求時(shí),服務(wù)器會(huì)校驗(yàn)當(dāng)前請(qǐng)求是不是來自被允許的站點(diǎn)。服務(wù)器就是通過 Origin 字段的值來進(jìn)行判斷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容