You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向公开API发起简单GET请求遇CORS错误,求可用XHR示例

解决跨域API调用的CORS问题

核心原因

浏览器的跨域安全机制要求目标API返回Access-Control-Allow-Origin响应头,而你调用的API未配置该头,所以直接用前端XHR发起跨域请求会被拦截。修改XHR请求头(比如setRequestHeader())完全没用,这不是请求头配置能绕过的浏览器安全规则。

最简单的可行方案:用自己的服务器做反向代理

如果你用Apache托管页面,这是最直接的解决方式,无需复杂工具或第三方库。

Apache配置步骤

在你的网站根目录创建或编辑.htaccess文件,添加以下规则:

RewriteEngine On
# 将前端请求的/api/proxy路径转发到目标API
RewriteRule ^api/proxy/(.*)$ https://example.com/myusername/$1 [P,L]

修改后的前端请求代码

把原来的跨域请求改成请求自己服务器的代理路径(同源请求不会触发CORS):

var xhr = new XMLHttpRequest();
xhr.open("GET", "/api/proxy/?key=myDevKeyHere&userid=1234", true);
xhr.onload = function() {
  console.log(xhr.responseText);
};
xhr.send();

原理:前端请求的是和页面同源的服务器路径,Apache会悄悄把请求转发到目标API,再把结果返回给前端。浏览器只识别同源请求,不会触发CORS限制。

关键安全提醒

别把开发密钥写在前端代码里!当前写法会让任何人通过查看源码拿到你的密钥,极易被滥用。正确做法是把密钥放在Apache代理配置中,前端仅传递userid,服务器转发时自动添加密钥:

修改后的Apache规则

RewriteEngine On
RewriteRule ^api/user/(.*)$ https://example.com/myusername/?key=myDevKeyHere&userid=$1 [P,L]

修改后的前端请求

var xhr = new XMLHttpRequest();
xhr.open("GET", "/api/user/1234", true);
xhr.onload = function() {
  console.log(xhr.responseText);
};
xhr.send();

内容的提问来源于stack exchange,提问作者Glenn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:55:20