网络与接口
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 那边,不在你的前端。
又称
另见