如何为JavaScript小部件放宽同源规则?(适配已弃用谷歌财经数据)
解决WordPress站点的跨域请求(SEC7120)问题
你遇到的是典型的浏览器同源策略限制——本地IDE测试时,浏览器对localhost的跨域校验规则比较宽松,而线上正式域名会严格检查目标接口返回的Access-Control-Allow-Origin响应头,导致请求被拦截。下面给你几个适配WordPress场景的可行解决方案:
方案1:用WordPress后端做请求代理(最可靠)
核心思路是:前端不再直接请求Google Finance的API,而是请求自己WordPress站点的后端接口,由服务器帮你转发请求并返回数据——服务器端请求不受浏览器同源策略限制。
具体操作:
- 打开当前主题的
functions.php文件(或者创建一个极简自定义插件),添加以下代码:
// 注册自定义API路由 add_action('rest_api_init', function () { register_rest_route('custom-proxy/v1', '/nsei-data/', array( 'methods' => 'GET', 'callback' => 'fetch_nsei_finance_data', 'permission_callback' => '__return_true' // 允许公开访问,可按需调整权限 )); }); // 处理请求转发的函数 function fetch_nsei_finance_data() { $target_api = 'https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o,h,l,c,v'; $response = wp_remote_get($target_api); if (is_wp_error($response)) { return new WP_Error('fetch_failed', '无法获取数据', array('status' => 500)); } // 设置响应头,确保前端能正常接收 header('Content-Type: text/plain'); return wp_remote_retrieve_body($response); }
- 前端代码里把请求地址替换为你的WordPress REST API地址,比如:
https://www.my-wordpress-site.com/wp-json/custom-proxy/v1/nsei-data/ - 这样前端请求的是自身域名,完全符合同源策略,后端帮你完成跨域数据的获取和转发。
方案2:安装CORS相关插件(最简单)
如果不想写代码,可以尝试WordPress的CORS类插件,比如Enable CORS或WP CORS:
- 安装激活插件后,在设置里添加允许访问的外部域名(这里是
https://www.google.com) - 注意:不是所有外部API都支持被添加CORS头,Google Finance的API可能未开放这个权限,所以这个方案可能不一定生效,但可以优先尝试。
方案3:尝试JSONP(备选方案)
Google Finance的部分接口支持JSONP格式,你可以在请求URL后追加&callback=yourFunctionName参数,用JSONP方式发起请求:
function processNseiData(data) { // 处理返回的原始数据 console.log(data); } // 通过script标签发起JSONP请求 const scriptTag = document.createElement('script'); scriptTag.src = 'https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o,h,l,c,v&callback=processNseiData'; document.body.appendChild(scriptTag);
不过要注意:JSONP存在安全风险,且现代API大多不再优先支持这种方式,所以仅作为备选方案。
额外排查提示
- 可以用浏览器开发者工具的Network面板,查看请求的响应头,确认
Access-Control-Allow-Origin是否存在,帮助定位问题 - 确保前端代码里的请求地址没有拼写错误,尤其是WordPress REST API的路由部分
内容的提问来源于stack exchange,提问作者Arash Howaida
相关产品推荐
相关产品推荐

