本地调用Google Calendar API批量请求遇CORS拦截问题求助
我在本地(http://localhost)测试Google Calendar API V3批量请求时,被跨域资源共享(CORS)策略拦截,错误提示:
from origin 'http://localhost' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource
数月前还能正常测试批量提交操作,如今出现该错误。以下是我通过Ajax POST发送给Google API的批量请求代码:
function batch(data,calendarId){ var boundary = 'xxxxxxxx'; var batchRequest = ''; var payload = data.filter(function(curr,i,arr){ batchRequest = batchRequest + "--"+boundary + '\r\nContent-Type:application/http'+ '\r\nContent-ID:'+i+'\r\n\r\nPOST https://www.googleapis.com/calendar/v3/calendars/'+calendarId+'/events'+ '\r\nContent-Type: application/json' + '\r\n\r\n' + JSON.stringify(curr) + "\r\n"; }); payload = batchRequest +'\r\n'+'--'+boundary+'--'; return payload; }
现寻求解决本地测试该批量请求问题的可行方案。
改用Google官方JavaScript客户端库
官方客户端库会自动处理CORS相关逻辑,无需手动构造批量请求的HTTP头和payload,直接调用封装好的批量接口即可规避跨域问题。搭建本地代理服务器
用Node.js、Python等工具搭建简单代理,将本地请求转发到Google API域名。浏览器只会识别同域请求,不会触发CORS拦截。
Node.js代理示例(依赖express和http-proxy-middleware):const express = require('express'); const { createProxyMiddleware } = require('http-proxy-middleware'); const app = express(); app.use('/google-proxy', createProxyMiddleware({ target: 'https://www.googleapis.com', changeOrigin: true, pathRewrite: { '^/google-proxy': '' } })); app.listen(3000);之后请求地址改为
http://localhost:3000/google-proxy/calendar/v3/...。检查Google Cloud OAuth配置
登录Google Cloud控制台,找到对应项目的OAuth 2.0客户端ID,确认已授权的JavaScript来源包含你的本地地址(如http://localhost:8080)。若配置被改动,补充本地地址即可。临时关闭Chrome跨域校验(仅开发测试)
启动Chrome时添加参数:--disable-web-security --user-data-dir="C:/ChromeDevProfile",关闭浏览器CORS校验。注意:此方法仅用于本地调试,禁止在生产环境使用。
内容的提问来源于stack exchange,提问作者VSP

