【发布时间】:2021-09-09 14:11:11
【问题描述】:
我正在尝试从客户端 javascript(在浏览器中)调用 Github REST API。
我的代码执行以下操作(我正在尝试获取包含私有存储库的分支 mkdocs_page 的 zip):
const endpoint = 'https://api.github.com';
const resource = '/repos/astariul/private-gh-pages/zipball/mkdocs_page';
const options = {
mode: 'cors',
headers: {
'Authorization': 'Basic ' + btoa(`${pat}`), // pat contains my Personal Access Token
}
}
return fetch(`${endpoint}${resource}`, options);
控制台错误信息:
CORS 政策已阻止访问“https://api.github.com/repos/astariul/private-gh-pages/zipball/mkdocs_page”从源“null”获取:对预检请求的响应不” t 通过访问控制检查:它没有 HTTP ok 状态。
在调试这个的过程中,我尝试用curl重现问题。当我指定一个经过身份验证的请求时,它可以工作:
curl --user "<my_PAT_token>" -i https://api.github.com/repos/astariul/private-gh-pages/zipball/mkdocs_page -X OPTIONS
HTTP/1.1 204 无内容
但是如果请求没有经过身份验证,它就不起作用:
curl -i https://api.github.com/repos/astariul/private-gh-pages/zipball/mkdocs_page -X OPTIONS
HTTP/1.1 404 未找到
注意:当我尝试获取主分支时它工作正常(无论是否经过身份验证)。但是,在被重定向后它会失败:
访问 'https://codeload.github.com/astariul/private-gh-pages/legacy.zip/refs/heads/main?token=XXX'(重定向自 'https://api. github.com/repos/astariul/private-gh-pages/zipball') 来自原点'null' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否 'Access-Control-Allow-Origin ' 请求的资源上存在标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
这是 Github API 的错误吗?还是我做错了什么?
【问题讨论】:
标签: javascript cors github-api client-side preflight