【发布时间】:2017-03-05 05:32:46
【问题描述】:
我在尝试使用 JIRA ReST API 时不断收到以下 CORS 错误:
Fetch API 无法加载 https://jira.our-domain-name.com/jira/rest/api/2/search?jql=project=tcc%20and%20cf[10809]~8423362。 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“https://application-url.our-domain-name.com” 使用权。如果不透明的响应满足您的需求,请设置请求的 模式为“no-cors”以获取禁用 CORS 的资源。
但是,当我将它直接粘贴到浏览器中,或者通过 Postman 运行它,或者从命令行使用 CURL 时,这个搜索 URL 可以 100% 工作。
我的应用正在调用 API,使用 javascript fetch API。我在发出 GET 请求时设置了以下标头:
headers: {
"content-type": "application/json",
"authorization": "Basic <<encrypted>>"
}
我已确保请求主机已在 JIRA 管理中被列入白名单 - 我已使用白名单页面上的测试功能测试了主机。
当我将白名单从通配符更改为域名时,我突然明白了:
Fetch API 无法加载 https://jira.our-domain-name.com/jira/rest/api/2/search?jql=project=tcc%20and%20cf[10809]~8423362。 请求头域授权是不允许的 预检响应中的 Access-Control-Allow-Headers。
有什么想法吗?
【问题讨论】:
-
我不是 JIRA 专家,但我遇到了类似的问题。您需要重新配置 JIRA 以允许 CORS 访问。仅仅将您的域列入白名单是不够的。如果您查看浏览器的网络历史记录,您会看到 XHR 首先向 JIRA 发送一个 OPTIONS 请求,该响应显然没有产生预期的权限。不过,我不知道如何在 JIRA 中修复它。
-
我已经浏览了每一个 JIRA 配置选项,并且没有任何特定于 CORS 的内容。他们只引用 CORS,在我设置的白名单上设置“允许传入”。我已经尝试了白名单类型中可用的所有选项,但没有成功。
-
我现在什至尝试在我的应用 URL 和 JIRA 之间创建一个应用程序链接,但仍然遇到相同的 CORS 错误。
-
还尝试使用基于 cookie 的身份验证,而不是基本身份验证。同样,在 CuRL 和 Postman 中工作,而不是从浏览器中工作。
-
我感受到了你的沮丧,因为那时我也一样。也许您对处理对您的 JIRA 应用程序的请求的网络服务器具有管理访问权限。在适当的服务器配置文件中,您可以设置将产生响应标头“Access-Control-Allow-Origin:*”的标头指令