Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的JavaScript代码会收到一个";否';访问控制允许原点';标题出现在请求的资源上;错误,而邮递员没有?_Javascript_Jquery_Cors_Same Origin Policy_Flask Restless - Fatal编程技术网

为什么我的JavaScript代码会收到一个";否';访问控制允许原点';标题出现在请求的资源上;错误,而邮递员没有?

为什么我的JavaScript代码会收到一个";否';访问控制允许原点';标题出现在请求的资源上;错误,而邮递员没有?,javascript,jquery,cors,same-origin-policy,flask-restless,Javascript,Jquery,Cors,Same Origin Policy,Flask Restless,Mod note:这个问题是关于为什么浏览器上的XMLHttpRequest/fetch/等受到相同的访问策略限制(提到CORB或CORS时会出现错误),而Postman不受限制。这个问题不是关于如何修复“No‘Access Control Allow Origin’…”错误的。这是关于它们为什么会发生的问题 请停止发布: 阳光下每种语言/框架的CORS配置。相反 允许请求绕过CORS的第三方服务 用于关闭各种浏览器的CORS的命令行选项 我正试图通过连接到内置服务器来进行授权。但是,当我

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

请停止发布

  • 阳光下每种语言/框架的CORS配置。相反
  • 允许请求绕过CORS的第三方服务
  • 用于关闭各种浏览器的CORS的命令行选项

我正试图通过连接到内置服务器来进行授权。但是,当我发出请求时,我得到以下错误:

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

我知道API或远程资源必须设置头,但是当我通过Chrome扩展发出请求时,为什么它能工作呢

这是请求代码:

$.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);
    });

如果我理解正确的话,您正在对一个与您的页面不同的域进行访问。因此,浏览器正在阻止它,因为出于安全原因,它通常允许同一来源的请求。当您想要执行跨域请求时,您需要执行一些不同的操作。关于如何实现这一点的教程是

当您使用邮递员时,他们不受本政策的限制。引自:

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


如果我理解正确的话,您正在对一个与您的页面不同的域进行访问。因此,浏览器正在阻止它,因为出于安全原因,它通常允许同一来源的请求。当您想要执行跨域请求时,您需要执行一些不同的操作。关于如何实现这一点的教程是

当您使用邮递员时,他们不受本政策的限制。引自:

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

警告:使用
访问控制允许来源:
会使您的API/网站容易受到(CSRF)攻击。在使用此代码之前,请确认您的身份

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

<?php header('Access-Control-Allow-Origin: *'); ?>
如果您使用的是与问题相同的选项;您必须首先安装
flask cors

$ pip install -U flask-cors
然后将烧瓶COR包括在您的应用程序中

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!"
有关更多详细信息,您可以查看

警告:使用
访问控制允许来源:
会使您的API/网站容易受到(CSRF)攻击。在使用此代码之前,请确认您的身份

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

<?php header('Access-Control-Allow-Origin: *'); ?>
如果您使用的是与问题相同的选项;您必须首先安装
flask cors

$ pip install -U flask-cors
然后将烧瓶COR包括在您的应用程序中

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!"
有关详细信息,您可以查看。

因为
$.ajax({type:“POST”-调用选项
$.post(-调用post

两者是不同的。邮递员正确地称呼“POST”,但当我们称呼它时,它将是“OPTIONS”

对于C#web服务-

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

<httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
    </customHeaders>
</httpProtocol>
注意:如果您正在寻找从第三方网站下载内容,则这对您没有帮助。。您可以尝试以下代码,但不能使用JavaScript

System.Net.WebClient wc = new System.Net.WebClient();
string str = wc.DownloadString("http://mysite.microsoft.sample.xyz.com/api/mycall");
因为
$.ajax({type:“POST”-调用选项
$.post(-调用post

两者是不同的。邮递员正确地称呼“POST”,但当我们称呼它时,它将是“OPTIONS”

对于C#web服务-

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

<httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
    </customHeaders>
</httpProtocol>
注意:如果您正在寻找从第三方网站下载内容,则这对您没有帮助。。您可以尝试以下代码,但不能使用JavaScript

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

在下面作为API的调查中,我使用了而不是来自您的问题,因为这是第一个有效的

我想你的页面已经打开了

您看到不同结果的原因是邮递员:

  • 设置标题
    Host=example.com
    (您的API)
  • 未设置标题
    Origin
这类似于浏览器在站点和API具有相同域时发送请求的方式(浏览器还设置标题项
Referer)=http://my-site.local:8088
,但是我在Postman中没有看到它)。当未设置
源文件
标题时,通常默认情况下服务器允许此类请求。

这是邮递员发送请求的标准方式。但是当您的站点和API具有不同的域时,浏览器会以不同的方式发送请求,然后浏览器会自动:

  • 设置标题[EnableCors("AllowOrigin")]
    const express = require('express');
    const request = require('request');
    
    const app = express();
    
    app.use((req, res, next) => {
      res.header('Access-Control-Allow-Origin', '*');
      next();
    });
    
    app.get('/fetch', (req, res) => {
      request(
        { url: req.query.url },
        (error, response, body) => {
          if (error || response.statusCode !== 200) {
            return res.status(500).send('error');
          }
          res.send(body);
        }
      )
    });
    
    const PORT = process.env.PORT || 3000;
    app.listen(PORT, () => console.log(`listening on ${PORT}`));
    
    <IfModule mod_headers.c>
      <FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$">
      Header set Access-Control-Allow-Origin "*"
      </FilesMatch>
    </IfModule>