四次元口袋 2019-07-24 14:42 采纳率: 0%
浏览 1716

为什么我的 JavaScript 代码在所请求的资源上没有出现“Access-Control-Allow-Origin'header”错误

而Postman就没问题?
我正在尝试通过连接到内置在 Flask 中的 RESTful API 来使用 JavaScript 进行授权。 但是,当我提出请求时,我会得到以下错误:
无法加载 http://myapiurl/login。 请求的资源上没有“访问控制允许原点”头。 因此,“ 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);
    });

  • 写回答

3条回答 默认 最新

  • weixin_38166163 2019-07-24 15:05
    关注

    如果我理解正确的话,那么你正在对页面不同的域执行 XMLHttpRequest。 因此,出于安全原因,浏览器屏蔽了它,因为它通常允许同一源的请求。当你希望执行跨域请求时,需要执行一些不同的操作。关于如何实现这一点的一个教程是使用 CORS。
    When you are using they are not restricted by this policy. Quoted from Cross-Origin XMLHttpRequest:
    当您使用 postman时,不受此策略的限制。
    常规 web 页面可以使用 XMLHttpRequest 对象从远程服务器发送和接收数据,但是它们受到同源策略的限制。 扩展并不是那么有限。 扩展可以与原始服务器之外的远程服务器通信,只要它首先请求跨原始权限即可。

    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站