【发布时间】:2016-02-17 23:57:28
【问题描述】:
我在 Confluence 用户宏中从 JavaScript 调用 JIRA REST API,我遇到了 CORS 问题,因为 JIRA 和 Confluence 位于两个不同的域中,并且来自浏览器的 preflight request 失败。我已经尝试了如下所述的几种 CORS 解决方案,但均未成功。所以我恳求其他人提供一些可能已经解决了这个问题的意见。
JavaScript sn-p 失败:
AJS.$.ajax({
type: "GET",
url: "http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45)",
dataType: "json",
contentType: "application/json",
async: false
})
错误消息(来自 Firefox):
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45). This can be fixed by moving the resource to the same domain or enabling CORS.
JIRA 配置
- JIRA 版本:6.4.12
- 网址:http://jira.mydomain.com
- 在前面运行 Apache(代理):是
- 响应标头配置:
Access-Control-Allow-Headers:origin, content-type, acceptAccess-Control-Allow-Methods:POST, GET, OPTIONSAccess-Control-Allow-Origin:*
- 响应标头配置:
- Confluence 添加到whitelist:是
- 表达式:Confluence (http://confluence.mydomain.com)
- 类型:应用链接
- 允许传入:True
Confluence 配置
- Confluence 版本:5.8.8
- 网址:http://confluence.mydomain.com
- 在前面运行 Apache(代理):是
- 响应标头配置:
Access-Control-Allow-Origin:*
- 响应标头配置:
- JIRA 添加到whitelist:是
- 表达式:Confluence (http://jira.mydomain.com)
- 类型:应用链接
- 允许传入:True
用浏览器测试:
- Chrome(最新)
- Safari(最新)
- Firefox(最新)
使用 CURL 测试预检请求 (OPTIONS):
ismar.slomic$ curl -X OPTIONS "http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45)" -v
* Trying 10.107.1.24...
* Connected to jira.mydomain.com (127.0.0.1) port 80 (#0)
> OPTIONS /rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45) HTTP/1.1
> Host: jira.mydomain.com
> User-Agent: curl/7.43.0
> Accept: */*
>
* Empty reply from server
* Connection #0 to host jira.mydomain.com left intact
curl: (52) Empty reply from server
这似乎是积极的回应。
使用 Crome 扩展 Postman 测试预检请求 (OPTIONS):
OPTIONS http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45)
响应错误:Could not get any response. This seems to be like an error connecting to http://jira.mydomain.com/rest/api/latest/search/?issue%20in%20linkedIssues(SR-45)
【问题讨论】:
-
在 Chrome 上收到与 Firefox 相同的错误消息吗?
-
Chrome 中的错误消息:NetworkError:无法在“XMLHttpRequest”上执行“发送”:无法加载“jira.mydomain.com/rest/api/latest/search/…...
-
您的 ajax 调用似乎没有通过。也许您可以添加一个错误回调并查看您获得的状态。此外,您将 json 指定为 dataType,因此请确保您确实在发送 json 数据。
-
在域上启动一个简单的直通服务。我以前必须这样做,在这种情况下使用了 Node。在 confluence/Jira 上向它发送一个带有你想要查询的 URL 的有效负载,然后返回它发送的响应。
-
rby:在这种情况下没有要发送的 json 数据。错误回调给出以下内容:statusText:“NetworkError:无法在'XMLHttpRequest'上执行'send':无法在issueLinks(SR-55)中加载'jira.mydomain.com/rest/api/latest/search/?jql=key=issue”
标签: javascript cors jira-rest-api