使用第三方Fake API时如何解决CORS错误?
首先明确:你没法通过修改自己的请求头来解决这个问题——CORS限制的核心是第三方API服务器必须返回Access-Control-Allow-Origin响应头,这个权限完全在API提供者手里,前端直接请求的话,只要对方没配置允许你的域名,浏览器就会拦截。
下面是几个可行的解决方向:
搭个简单的代理服务器(推荐用于生产/正式开发)
自己写个小代理,前端请求你的代理服务器,再由代理转发请求到第三方API。因为浏览器只检查和自己直接通信的服务器(你的代理)的CORS头,而服务器之间的请求不受浏览器CORS限制。
举个Node.js的简单例子,用Express和http-proxy-middleware:const express = require('express'); const { createProxyMiddleware } = require('http-proxy-middleware'); const app = express(); // 配置代理,把/api开头的请求转发到第三方API地址 app.use('/api', createProxyMiddleware({ target: 'https://第三方API的域名', changeOrigin: true, pathRewrite: { '^/api': '' } // 如果需要去掉/api前缀的话 })); app.listen(3000, () => { console.log('代理服务器运行在http://localhost:3000'); });之后前端就请求
http://localhost:3000/api/接口路径,代理会转发到第三方API,同时返回正确的CORS头给浏览器。用浏览器插件临时绕过(仅用于开发调试)
安装类似「Allow CORS: Access-Control-Allow-Origin」这类浏览器插件,开启后会自动给响应头加上允许跨域的字段,适合开发时快速测试,但绝对不能用于生产环境,因为用户不会装这个插件。检查第三方API是否支持JSONP
如果API支持JSONP,可以用这种方式发起请求(只能处理GET请求)。比如在前端创建script标签,src指向带callback参数的API地址,API会返回包裹在回调函数里的数据,浏览器不会拦截这种请求。查看是否有官方SDK/客户端库
有些第三方API会提供专门的前端SDK,这些SDK可能已经通过后端代理或者其他方式处理了CORS问题,直接用官方库就行。
内容的提问来源于stack exchange,提问作者UnkownSomeone

