首页 > JavaScript > 为什么我的 JavaScript 代码收到“请求的资源上不存在’访问控制-允许来源’标头”错误,而 Postman 没有?

为什么我的 JavaScript 代码收到“请求的资源上不存在’访问控制-允许来源’标头”错误,而 Postman 没有?

上一篇 下一篇

模组注意:这个问题是关于为什么 //等。在浏览器上受相同的访问策略限制(您会收到提及 CORB 或 CORS 的错误),而 Postman 则不受约束。这个问题不是关于如何修复“没有’访问控制-允许-来源’…”错误。这是关于它们为什么会发生。XMLHttpRequestfetch

请停止发布

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

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

XMLHttpRequest cannot load http://myApiUrl/login. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'null' is therefore not allowed access.

我知道 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);
      });

分割线

网友回答:

警告:使用会使您的 API/网站容易受到跨站点请求伪造 (CSRF) 攻击。在使用此代码之前,请确保您了解风险。Access-Control-Allow-Origin: *

如果您使用的是 PHP,则解决起来非常简单。只需在处理请求的 PHP 页面开头添加以下脚本:

<?php header('Access-Control-Allow-Origin: *'); ?>

如果您使用的是 Node-red,则必须通过取消注释以下行来允许文件中的 CORS:node-red/settings.js

// The following property can be used to configure cross-origin resource sharing
// in the HTTP nodes.
// See https://github.com/troygoode/node-cors#configuration-options for
// details on its contents. The following is a basic permissive set of options:
httpNodeCors: {
  origin: "*",
  methods: "GET,PUT,POST,DELETE"
},

如果您使用的是与问题相同的烧瓶;您必须先安装flask-cors

pip install -U flask-cors

然后将 Flask cors 包包含在您的应用程序中。

from flask_cors import CORS

一个简单的应用程序将如下所示:

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route("/")
def helloWorld():
  return "Hello, cross-origin-world!"

有关更多详细信息,您可以查看 Flask 文档。

分割线

网友回答:

如果我理解正确,您正在对与您的页面所在的域不同的域执行XMLHttpRequest。因此,浏览器会阻止它,因为它通常出于安全原因允许同一来源的请求。当您想要执行跨域请求时,您需要执行一些不同操作。

当您使用邮递员时,他们不受此政策的限制。引自 Cross-Native XMLHttpRequest

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

分割线

网友回答:

因为
$.ajax({type: “POST” – 调用 OPTIONS
$.post( – 调用 POST

两者都是不同的。邮递员正确地调用“POST”,但是当我们调用它时,它将是“选项”。

对于 C# Web 服务 – Web API

请在 web.config 文件中的 <system.webServer> 标记下添加以下代码。这将起作用:

<httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
    </customHeaders>
</httpProtocol>

请确保您在 Ajax 调用中没有犯任何错误。

jQuery

$.ajax({
    url: 'http://mysite.microsoft.sample.xyz.com/api/mycall',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    type: "POST", /* or type:"GET" or type:"PUT" */
    dataType: "json",
    data: {
    },
    success: function (result) {
        console.log(result);
    },
    error: function () {
        console.log("error");
    }
});

注意:如果您正在寻找从第三方网站下载内容,那么这将对您无济于事。您可以尝试以下代码,但不能尝试 JavaScript。

System.Net.WebClient wc = new System.Net.WebClient();
string str = wc.DownloadString("http://mysite.microsoft.sample.xyz.com/api/mycall");

模板简介:该模板名称为【为什么我的 JavaScript 代码收到“请求的资源上不存在’访问控制-允许来源’标头”错误,而 Postman 没有?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 326次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-23
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信文章 微信图片 自适应 微信模板 企业网站 单页式简历模板 微信公众平台 html5 微信素材 响应式
您可能会喜欢的其他模板