CORS,全名 Cross-Origin Resource Sharing,中文翻譯為跨來源資源共用。
網頁世界有一條重要的安全規則叫做「同源政策」(Same-Origin Policy),它會限制網頁只能讀取同一個來源的資料。
同源是指三個東西都要一樣:網域、協定(http或https)、和埠(port)。
這是為了防止壞人網站偷偷向你正在瀏覽的網站要資料,保障你和網站的安全。
當你瀏覽的網站想從另一個網站取得資料時,瀏覽器會先詢問目標網站:「你願意讓這個網站取用你的資料嗎?」
目標網站如果同意,會在回應中加上一些特別的「CORS 標頭」,告訴瀏覽器:「這個外部網站可以使用我的資料!」
瀏覽器看到允許的訊號後,才會把資料交給原本請求的網站。否則,資料請求會被阻擋。
很多人覺得「只要網域、協定、埠都一樣就是同源,很簡單」,但現實中這三者容易有一項不一樣,造成跨源限制:
https://myapp.com
,但想取得的API可能是子網域 https://api.myapp.com
,網域不同就不是同源。http
,有些用 https
,協定不同也算跨源。瀏覽器會自動阻擋這些不同源的請求,直到伺服器正確設定 CORS 授權為止。