【问题标题】:Unable to make CORS request in ExtJS 6无法在 ExtJS 6 中发出 CORS 请求
【发布时间】:2018-11-13 23:09:18
【问题描述】:

所以,我的 localhost 有一个页面,该页面将请求发送到远程站点。我尝试这样做:

Ext.Ajax.cors = true;
Ext.Ajax.request({
    url: "http://remoteaddress.com",            
    method: "GET",
    headers: {
        "Access-Control-Allow-Origin": "*"
    },
    cors: true,
    useDefaultXhrHeader: false,
    success: function (result, request) {
        console.log("success!!!");
    }
});

所以,我跟踪了几十个线程并设置了这些参数 - corsuseDefaultXhrHeader 等,但无济于事。

但是,如果我在邮递员中构建相同的请求(对相同 remoteaddress.com 的请求),那就没问题了。

那么,我做错了什么,我该如何解决?

【问题讨论】:

  • 如我所见,整个问题在于OPTIONS 方法,但我不确定如何切换到GET 请求。我想,cors: trueuseDefaultXhrHeader: false 应该可以解决问题,但他们没有。
  • 从您的前端代码中删除 ` headers: { "Access-Control-Allow-Origin": "*" }`。 Access-Control-Allow-Origin 是响应标头,而不是请求标头。尝试将其设置为请求标头是触发浏览器执行该 OPTIONS 请求的原因。

标签: ajax extjs cors


【解决方案1】:

使用 OPTIONS 方法的请求是预检请求。

来自msdna

CORS 预检请求是一个 CORS 请求,用于检查是否 理解 CORS 协议。

这是一个 OPTIONS 请求,使用三个 HTTP 请求标头: Access-Control-Request-Method、Access-Control-Request-Headers 和 源头。

浏览器会在需要时自动发出预检请求。 在正常情况下,前端开发人员不需要制作这样的 自己请求。

网络服务器必须使用标头来回答它,以允许浏览器执行实际请求。

HTTP/1.1 200 OK
Content-Length: 0
Connection: keep-alive
Access-Control-Allow-Origin: localhost
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 86400

【讨论】:

    【解决方案2】:

    这里有一个快速解决方法

    打开终端并运行此代码

    open -n -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir="/tmp/chrome_dev_sess_1" --disable-web-security
    

    然后只需使用新的 chrome 窗口进行开发,一旦您将网站托管在某个地方,它就不会再引起问题了

    *注意这是 MacOs chrome *

    【讨论】:

      猜你喜欢
      • 2019-10-21
      • 1970-01-01
      • 2014-02-17
      • 2017-08-06
      • 2018-09-18
      • 1970-01-01
      • 2020-10-17
      • 2015-02-25
      • 1970-01-01
      相关资源
      最近更新 更多