網路與介面
CORS · 跨來源資源共享
/ korz /
CORS(跨來源資源共享)是瀏覽器的一條規矩:它會攔住一個網頁,不讓它悄悄去呼叫另一個網站的 API——除非那個網站明確說過「可以,我允許你」。你的頁面來自一個「來源」(origin,比如 myapp.com),而 API 住在另一個來源(api.bank.com);預設情況下,瀏覽器會把這兩者之間的門「砰」地關上。CORS 就是把這扇門重新打開的那次禮貌握手。
它的存在是有道理的。要是沒有它,你隨手點開的任何一個可疑網站,都能藉著你瀏覽器裡已經存著的登入 cookie,朝你的銀行、你的信箱、你的一切發請求。所以瀏覽器預設就是「一個頁面只能自由地跟自己的來源對話」,而伺服器必須主動選擇放行——回送一個請求標頭(Access-Control-Allow-Origin),點名誰是受歡迎的。
下面這點是每個新手都會栽的坑:所謂「CORS 錯誤」並不是你程式碼裡的 bug,其實也不算伺服器報的錯——它是瀏覽器拒絕把一個伺服器其實已經發回來的回應交給你,因為伺服器忘了帶上那個許可標頭。修法在 API 伺服器那邊(加上那個標頭),而不在你的前端。明白了這一點,主控台裡那一串紅字就不再嚇人了。
# The server opts in by naming who's allowed: Access-Control-Allow-Origin: https://myapp.com # Without this header, the browser blocks your page from reading the reply.
API 伺服器上加這一個標頭,往往就是「CORS 錯誤」的全部解藥。
CORS 錯誤是瀏覽器投的反對票,不是伺服器報的錯。解藥在 API 那邊,不在你的前端。
又稱
另見