【问题标题】:Getting 401 on API but working with postMan在 API 上获得 401 但使用 postMan
【发布时间】:2023-03-11 19:47:01
【问题描述】:

我有这个 API:

            const url = url;
            const headers = new Headers({
                "Content-Type": "application/json",
                "Accept": "application/json", // change to application/javascript for jsonp
                "Access-Control-Allow-Credentials": true,
                "Access-Control-Allow-Origin": true,
                "access_token": accessToken,
                "id_token": idToken,
            });
            const options = {
                method: "GET",
                headers: headers,
                credentials: "same-origin",
                mode: "no-cors"
            };

            fetch(url, options)
            .then(function(response) {
                console.log('-working: ',response.json());
            })
            .catch(function(error) {
                console.log('-error: ',error);
            });

在 postMan 上拥有相同的 API,这就像一个魅力,但在我的代码上,我总是得到 401(未经授权)。

此外,如果我删除“no-cors”,我会收到 401 plus CORS 问题

【问题讨论】:

标签: fetch es6-promise


【解决方案1】:

我遇到了同样的问题。

前辈说,CORS 不安全,所以先对比一下两个请求的 header。

我建议您使用Wireshark 查看两个请求发送的标头。

步骤(步骤 3 和 4 是为了方便地发现您的请求):

  1. 安装 Wireshark。
  2. 选择您用于通话的网络连接(例如,如果您正在使用,请选择 Wifi)
  3. 会有很多请求和响应,关闭额外的应用程序。
  4. 通常请求是绿色的,一旦你发现你的请求,复制目标地址并使用顶部的过滤器 通过输入目标地址输入ip.dst==52.187.182.185
  5. 点击邮递员和您的电话提出的请求。
  6. 比较两个标题。

在我的例子中,我从我的 react native 应用程序调用 API,并且 header 参数被自动转换为小写。 因此,为了更正它,我在后端服务器中将参数设置为小写。

在两个窗口之间播放“Spot the difference”并找到你的。

如果这不起作用,请继续设置 CORS。

【讨论】:

    【解决方案2】:

    需要在后端添加 CORS 作为附加标头

    【讨论】:

      猜你喜欢
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      相关资源
      最近更新 更多