Skip to main content

CORS

此篇內容尚不完整,可能還會有很大的變動
僅供參考,若要查看完整版本,建議去看 MDN Web Docs 會比較好

CORS 為「跨來源資源分享」的縮寫,旨在控制不同網域來源的資源存取控制(Access Control)

一般來說,JavaScript 的 Fetch API 和 XMLHttpRequest 遵守同源政策(Same origin policy),意味著這些 API 只能存取相同網域來源的資源,這是避免 CSRF(跨站點請求偽造)的做法。

如果有不同網域的資源需要存取,則該資源需要加入一系列 CORS HTTP Header。

一般來說,經由上述 API 進行的 HTTP 請求(如 GET、POST)都會在 HTTP Header 附上 Origin 這個 Header,代表該 HTTP Request 的來源。

此時伺服器可能會回傳以下這些 Header,以下代表該 Header 的意思:

以下是簡單請求、複雜請求都會有的必要 Header:

  • Access-Control-Allow-Origin : 代表該資源允許存取的網域清單,* 代表所有網域都可以存取

以下是複雜請求的所需條件,像是 GET、POST、HEAD 以外的方法之外,或是滿足以下任意 Header 的請求:

  • Accept: 請求方希望的識別類型
  • Accept-Language:  Client 希望能夠理解的偏好語言
  • Content-Language: 實際上讓閱聽者能夠理解的偏好語言
  • Content-Type: 實際上回傳過來的資源識別類型

如果有需要,也可以建立預檢請求,檢視伺服器的 CORS 要求

  • 會使用 OPTIONS 方法
  • 會傳送 Access-Control-Request-Method: <Method> 這個 Header

伺服器則必須回應

  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers
  • Access-Control-Allow-Origin