一尘不染

为什么我的 JavaScript 代码会收到“请求的资源上不存在 'Access-Control-Allow-Origin' 标头”错误,而 Postman 却没有?

javascript

Mod注意:这个问题是关于为什么XMLHttpRequest/ fetch/等。浏览器上的受相同访问策略限制(您会收到提及 CORB 或 CORS 的错误),而 Postman 则不受此限制。这个问题不是关于如何修复“No ‘Access-Control-Allow-Origin’…”错误。这是关于它们发生的原因。

请停止发帖

  • 日光下每种语言/框架的 CORS 配置。而是找到您的相关语言/框架的问题。
  • 允许请求规避 CORS 的 3rd 方服务
  • 用于关闭各种浏览器的 CORS 的命令行选项

我正在尝试通过连接到RESTful API内置Flask来使用JavaScript进行授权。但是,当我提出请求时,我收到以下错误:

XMLHttpRequest 无法加载 http://myApiUrl/login。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin ‘null’ 不允许访问。

我知道 API 或远程资源必须设置标头,但是为什么当我通过 Chrome 扩展Postman发出请求时它会起作用?

这是请求代码:

$.ajax({
    type: "POST",
    dataType: 'text',
    url: api,
    username: 'user',
    password: 'pass',
    crossDomain : true,
    xhrFields: {
        withCredentials: true
    }
})
    .done(function( data ) {
        console.log("done");
    })
    .fail( function(xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
        alert(textStatus);
    });

阅读 263

收藏
2022-01-24

共1个答案

一尘不染

如果我理解正确,您正在对与您的页面所在的域不同的域执行XMLHttpRequest 。因此浏览器会阻止它,因为出于安全原因,它通常允许同一来源的请求。当您想要进行跨域请求时,您需要做一些不同的事情。有关如何实现这一点的教程是使用 CORS

当您使用 Postman 时,它们不受此政策的限制。引用自跨域 XMLHttpRequest

常规网页可以使用 XMLHttpRequest 对象从远程服务器发送和接收数据,但它们受到同源策略的限制。扩展并没有那么有限。扩展程序可以与其源之外的远程服务器通信,只要它首先请求跨域权限。

2022-01-24