【问题标题】:fetch won't let me authorize get requestfetch 不会让我授权获取请求
【发布时间】:2021-07-02 08:46:25
【问题描述】:

我正在尝试在浏览器上使用 fetch 但它不起作用。

我试过了:

fetch('https://api-2sizcg3ipa-uc.a.run.app/fats', {
headers: {'Authorization': 'Basic ' + btoa('username:password')},
mode:'no-cors'
})
.then(response => response.json())
.then(json => console.log(json));

但它给了我两个错误:

GET https://api-2sizcg3ipa-uc.a.run.app/fatsnet::ERR_ABORTED 403

Uncaught (in promise) SyntaxError: Unexpected end of input 在 fetch.js:5

我做错了什么?当我使用 curl 时,我会工作。

【问题讨论】:

    标签: javascript json header cors fetch


    【解决方案1】:

    你说:

    mode:'no-cors'
    

    这使得fetch 悄悄地忽略任何需要通过 CORS 获得许可的内容,而不是因为错误而失败。

    发送授权标头需要通过 CORS 获得许可。

    所以不要说你不想用它。

    但是,当您要发送凭据时,请说 credentials: 'include'。

    【讨论】:

    • 谢谢,我这样做是因为它说。 CORS 策略已阻止从源“null”获取“api-2sizcg3ipa-uc.a.run.app/fats”的访问权限:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头.如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。但我尝试添加一个 Access-Control-Allow-Origin:'*' 也没有成功。
    • @pete — 您需要正确添加 Access-Control-Allow-Origin(对预检请求的 HTTP 响应和对真实请求的响应)。请注意,它说的是 requested resource (即您从服务器获得 的内容)而不是 request (这是您发送到服务器的内容)-如果您的 JS 可以授予自己访问它喜欢的任何内容的权限,那么整个安全策略将变得毫无意义。
    • 我尝试添加凭据:include 和 'Access-Control-Allow-Origin':'api-2sizcg3ipa-uc.a.run.app/fats' 仍然无法正常工作。
    • credentials:'include' 继续 fetch 配置,Access-Control-Allow-Origin 继续响应(如果您阅读了错误消息,如果您只是设置Access-Control-Allow-Origin你会看到你需要其他 Allow- 指令来处理你正在使用的特定事物)
    • 回应?你的意思是 Access-Control-Allow-Origin 继续 .then()?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2018-05-04
    • 1970-01-01
    • 2015-02-01
    • 2019-05-17
    • 2017-02-04
    • 1970-01-01
    相关资源
    最近更新 更多