跨域是什么,CORS 和开发代理怎么工作
先理解原理和示例,再练习完整口述与追问。
回答要点
浏览器依据同源策略限制脚本跨源读取响应。CORS 由服务端通过响应头授权,部分请求会先发预检;开发代理通过同源服务转发。跨域不等于所有请求都发不出去。
携带凭证时不能把允许来源简单设为通配符;还需考虑 Cookie 策略。MDN:CORS
原理拆解
同源由协议、主机和端口共同决定。浏览器同源策略限制脚本读取部分跨源资源,不等于服务器完全收不到请求。CORS 由目标服务响应允许的来源、方法和头;不满足简单请求条件时,浏览器先发送 OPTIONS 预检。开发代理把浏览器访问的同源地址转发给后端,发生跨源通信的是服务器,因此不能指望开发代理自动成为线上方案。
示例与推演
页面 https://app.example 请求 https://api.example,携带凭据时 fetch 要设置 credentials,服务端需明确允许该 origin 并允许凭据,不能使用 Access-Control-Allow-Origin:*。自定义认证头或 application/json 常会触发预检。线上可以配置正确 CORS,或用站点的同源反向代理;它们分别在不同位置解决读取限制。
易错点
CORS 不是接口鉴权,也不阻止所有跨站写入。Cookie 是否实际发送还受 SameSite、Secure 和浏览器策略影响;mode:no-cors 通常只得到不可读的 opaque 响应。
参考回答可直接练习口述
跨域限制主要是浏览器同源策略对脚本访问跨源结果等行为的约束,不是所有跨域请求都发不出去。CORS 由服务端响应允许来源、方法和头;某些请求先发 OPTIONS 预检。开发代理让浏览器请求同源开发服务器,再由它转发到接口服务,生产还需真实网关或 CORS 配置。携带凭证时允许来源不能简单用星号,还受 Cookie 和第三方策略限制;前端加一个响应头名字不能替服务端授权。