返回課程

我們為什麼需要 Origin?

重要性:5

正如你所知,有一個 HTTP 標頭 Referer,通常包含發起網路要求的頁面網址。

例如,當從 https://javascriptinfo.dev.org.tw/some/url 擷取 http://google.com 時,標頭如下所示

Accept: */*
Accept-Charset: utf-8
Accept-Encoding: gzip,deflate,sdch
Connection: keep-alive
Host: google.com
Origin: https://javascriptinfo.dev.org.tw
Referer: https://javascriptinfo.dev.org.tw/some/url

如你所見,RefererOrigin 都存在。

問題

  1. 如果 Referer 擁有更多資訊,為什麼需要 Origin
  2. RefererOrigin 可能不存在嗎?還是這是錯誤的?

我們需要 Origin,因為有時 Referer 不存在。例如,當我們從 HTTPS 擷取 HTTP 頁面(從較安全的存取較不安全的)時,就沒有 Referer

內容安全政策 可能禁止傳送 Referer

正如我們將看到的,fetch 有選項可以防止傳送 Referer,甚至允許在(同一個網站內)更改它。

根據規範,Referer 是可選的 HTTP 標頭。

正是由於 Referer 不可靠,所以才發明了 Origin。瀏覽器保證跨來源請求的 Origin 正確。