axios请求指定URI遇CORS错误,Postman请求正常的技术咨询
CORS错误排查:Postman可正常请求但Axios报错
我通过Postman向目标地址发送HTTP GET请求时能正常获取响应,但用以下Axios代码请求时,出现CORS错误:
错误信息:请求的资源上不存在'Access-Control-Allow-Origin'头
问题代码
const getData = async () => { const url = " https://www.aponet.de/apotheke/apothekensuche?tx_aponetpharmacy_search%5Baction%5D=result&tx_aponetpharmacy_search%5Bcontroller%5D=Search&tx_aponetpharmacy_search%5Bsearch%5D%5Bplzort%5D=rothenburg&tx_aponetpharmacy_search%5Bsearch%5D%5Bstreet%5D=&tx_aponetpharmacy_search%5Bsearch%5D%5Bradius%5D=10&tx_aponetpharmacy_search%5Bsearch%5D%5Blat%5D=&tx_aponetpharmacy_search%5Bsearch%5D%5Blng%5D=&type=1981 " axios.get(url) .then((response) => { console.log(response); }) .catch((err) => { console.log(err); }) }
原因分析
Postman属于后端请求工具,不受浏览器的跨域资源共享(CORS)策略约束。而浏览器在发起跨域请求时,会自动触发预检请求,并检查服务器返回的响应头是否包含Access-Control-Allow-Origin,目标服务器未配置该头,所以浏览器拦截了响应,抛出CORS错误。
解决方案
- 本地代理转发:在前端开发环境配置代理,让请求通过同域名转发到目标服务器,绕过浏览器CORS检查。比如webpack-dev-server的代理配置:
之后请求路径改为module.exports = { devServer: { proxy: { '/apotheke': { target: 'https://www.aponet.de', changeOrigin: true } } } };/apotheke/apothekensuche?xxx即可。 - 服务器端配置CORS:若能控制目标服务器,添加
Access-Control-Allow-Origin响应头,可设置为允许的具体域名或*(允许所有域名,不建议生产环境使用)。 - 开发环境临时插件:使用浏览器CORS插件(如Chrome的Allow CORS: Access-Control-Allow-Origin)临时绕过检查,仅限开发测试,禁止用于生产环境。
内容的提问来源于stack exchange,提问作者ali yıldız
相关产品推荐
相关产品推荐

