CORS
CORS(跨源资源共享)是浏览器判断网页能否读取跨源接口响应的一套规则。它让接口服务端决定允许哪些网页来源访问数据;比如后台页面和 API 不同域名时,浏览器会检查 API 返回的跨源许可。
你可能会说:「我的网页和 API 不在同一个域名,接口能返回数据,但浏览器里一直读不到,帮我排查。」
动手看看管理后台读取跨域订单接口
旧站后台要读取订单,浏览器代它向另一个域名的接口发请求,并带上网页的来源。
要点浏览器为什么会拦住一个能返回数据的接口?
- 1
先看请求是否跨源
浏览器比较的是网页与目标地址的协议、主机和端口;其中一项不同,就是跨源。比如你在本机一个端口打开管理后台,却从另一个端口请求 API,开发者工具里就可能看到 CORS 报错。
- 2
许可由接口服务端给出
网页发起跨源请求后,浏览器会检查接口响应里的 CORS 相关响应头,再决定是否把响应交给网页代码。所以只改前端请求参数,通常不能让一个未获许可的来源读到响应。
- 3
有些请求会先问能不能发
浏览器对某些跨源请求会先发送预检请求,询问接口是否允许接下来的请求方法和请求头。你给管理后台加了自定义请求头后,如果预检失败,真正的业务请求就不会发出。
- 4
登录状态还要单独考虑
如果跨源请求需要携带 Cookie,浏览器和服务端还要配合处理凭据设置;此时不能用通配符来表示允许任意来源。CORS 放行只表示浏览器可以读取响应,不代表用户已经登录或有权查看数据。
容易混淆的地方
CORS 容易和身份认证、权限控制混在一起。CORS 管的是浏览器中的网页代码能否读取跨源响应;身份认证确认用户是谁,权限控制判断他能看什么。它也不是接口报错的统称:网络断开、接口返回错误状态或服务端异常,得沿着各自的线索排查。
什么时候用
适合用
- 你把管理后台部署在一个域名、API 部署在另一个域名,需要让浏览器里的后台页面读取接口数据。
- 本地开发时,前端与 API 运行在不同端口,浏览器报跨源错误,需要检查接口的 CORS 配置。
- 网页直接请求第三方 API,先确认对方是否允许你的网页来源读取响应;若不允许,再考虑服务端转发。
不适合用
- 后端服务直接请求另一个服务的 API 时,通常不靠 CORS 放行;排查重点是网络连通、接口鉴权和服务端响应。
- 网页和 API 本来就是同源,却拿不到数据时,先查请求地址、登录状态和接口错误,而不是添加 CORS 配置。
- 想限制某个用户能否查看订单时,CORS 不能代替权限控制;要在后端根据用户身份校验访问权限。
练一练选一个答案,看看解释
你做的后台网页从另一个域名请求 API。加上自定义请求头后,开发者工具显示预检失败,业务请求没有发出。下一步怎么处理?
让 AI 帮你做复制给 AI Agent 直接用
请帮我排查后台网页请求异源 API 时的 CORS 报错。先核对网页来源、请求方法和请求头,确认是否有预检;再检查 API 的响应头与预检处理。说明需要修改前端还是服务端,并保留现有的身份认证和权限校验。