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