跨域调用Web Service遇预检请求无效(重定向)错误求助
解决跨域请求中"Response for preflight is invalid (redirect)"错误
嘿,我来帮你搞定这个跨域问题!先从错误本身和你的代码问题一步步拆解:
错误原因分析
你遇到的Response for preflight is invalid (redirect),本质是浏览器发送的**预请求(OPTIONS请求)**被服务器重定向了——浏览器不允许预请求被重定向,直接判定请求无效。这大概率是因为你请求的https://sap.atlassian.net是站点根地址,访问它会触发登录页重定向,同时你的AJAX代码还有几个配置错误。
先修正你的AJAX代码里的明显问题
你的代码里有几个坑,先改了再说:
- 错误添加
Access-Control-Allow-Origin请求头:这个头是服务器返回给浏览器的响应头,用来允许跨域,客户端请求里加它完全没用,还可能干扰预请求。 ProcessData大小写错误:jQuery的配置项是小写的processData,大写会被忽略,导致数据处理异常。- 请求地址错误:直接请求Atlassian站点根地址会触发登录重定向,你应该请求具体的API端点(比如Jira的
/rest/api/3/issue这类接口)。
修正后的代码示例:
var username = "pra@sap.com"; // 注意:Atlassian云服务建议用API令牌代替账号密码,去你的Atlassian账号设置里生成 var apiToken = "你的API令牌"; var targetApiUrl = "https://sap.atlassian.net/rest/api/3/issue"; // 替换成你实际要调用的API端点 $.ajax({ type: 'POST', data: JSON.stringify(data1), // 确保data1被序列化为JSON字符串 url: targetApiUrl, dataType: 'json', contentType: "application/json", crossDomain: true, processData: false, // 因为已经手动序列化数据,设为false避免jQuery重复处理 headers: { // Basic Auth认证:把用户名和API令牌转成Base64 "Authorization": "Basic " + btoa(username + ":" + apiToken) }, success: function(res) { console.log("请求成功:", res); }, error: function(xhr, status, err) { console.error("请求失败:", status, err); } });
核心跨域问题的解决思路
Atlassian云服务默认不允许前端直接跨域请求,你有两个可行方案:
方案1:配置Atlassian站点的CORS白名单
如果你有权限管理sap.atlassian.net这个站点:
- 登录Atlassian管理后台,找到CORS设置(不同产品路径略有不同,比如Jira是在「设置」→「应用程序」→「CORS」)
- 添加你的前端域名(比如
https://your-frontend-site.com),允许该域名发起跨域请求 - 配置完成后,服务器会给预请求返回正确的CORS响应头,浏览器就不会拦截了
方案2:搭建后端代理(推荐)
如果没法修改Atlassian的CORS设置,最稳妥的办法是让前端请求你自己的后端服务器,再由后端去调用Atlassian的API:
- 后端请求没有跨域限制,能正常调用Atlassian接口
- 前端和后端同域,完全避免跨域问题
- 还能把认证信息(比如API令牌)存在后端,更安全
额外注意事项
- 不要用账号密码直接做Basic Auth:Atlassian云已经逐步禁用账号密码调用API,一定要用API令牌(在Atlassian账号的「安全设置」里生成)
- 确认API端点正确性:一定要用Atlassian官方文档里的合法API路径,避免触发重定向
内容的提问来源于stack exchange,提问作者aayushi rathore
相关产品推荐
相关产品推荐

