fetch() 总是返回“type: 'opaque'”。但我可以在我的端点上成功使用 Postman

Chr*_*777 4 javascript rest azure azure-functions

我在 JavaScript 方面一定很糟糕,但我已经为此苦苦挣扎了几天,但没有取得任何进展。

长话短说,我正在尝试使用 UPS 的 REST API。我可以使用 Postman 完成此操作,也可以使用 PowerShell 完成此操作,没有任何问题。JavaScript 是一个完全不同的故事,我一无所获。

我已经尝试过 XMLHttpRequest 和 fetch(),并且尝试了很多不同的组合,我无法一一列出。

下面是我的网络应用程序中的 JS 函数(它在字段更改时触发)。JS 函数调用 Azure 函数(Azure 函数通过 Postman 和 PowerShell 运行。)

function getUpsShipTime() {
    var jsonBody = {
        "DeliveryDate": "2017-06-06",
        "ShippingCode": "GND",
        "ShipFrom": {
            "Address": {
                "StateProvinceCode": "CA",
                "CountryCode": "US",
                "PostalCode": "90210"
            },
        },
        "ShipTo": {
            "Address": {
                "StateProvinceCode": "FL",
                "CountryCode": "US",
                "PostalCode": "32830"
            }
        }
    }

    var uri = "https://MyAzureFunction.azurewebsites.net/api/HttpTriggerPowerShell1?code=MyAuthCode=="

    var req = new Request(uri, {
        method: 'post',
        mode: 'no-cors',
        headers: {
            'Content-type': 'application/json'
        },
        body: JSON.stringify(jsonBody)
    });
    fetch(req)
        .then(function (response) {
            console.log(response);
            return response.blob();
        }).then(function (blob) {
            console.log(blob);
        });
}
Run Code Online (Sandbox Code Playgroud)

当该函数运行时,我得到以下信息:

针对我的 REST 端点的 fetch() 结果

这是我从邮递员那里得到的信息:

来自 Postman 的 REST 调用结果

我究竟做错了什么?

Mik*_*kov 5

您以模式请求 URL no-cors,这就是返回不透明响应的原因。实际上,这就是您所要求的。

相反,我建议您按照此处所述为 Azure Function 配置 CORS ,并将模式更改为cors.

  • 你说得完全正确,我对SO上的其他人也说过同样的话——我已经成为我所厌恶的人,我深表歉意。据我了解,CORS是为浏览器实现的,以防止基于浏览器的攻击!例如,dodgywebsite.ru 向bank.com/transfermoney 发布“amount=100;account=somethief;”。但它完全被 XSS 漏洞所阻碍。这并不像许多 CORS 教程或博客文章中那样明显。 (3认同)
  • 这是 cookie 或基本身份验证的问题 - 因为浏览器会自动向服务器发送身份验证信息,因此从 dodgysite.ru 到bank.com 的帖子与从bank.com 到bank.com 的帖子相同 - 没有 CORS 保护!@克里斯76786777 (2认同)