我正在开发一个项目(前端),该项目将与另一个域中的另一个(API)进行通信。

现在,我在本地工作,使用以下配置:

  • 前端 : http://127.0.0.1:9000
  • API : http://127.0.0.1:9100

  • 在我的 API 程序中,我定义了一个 OPTIONS 请求,该请求返回这些 header 以及 HTTP 状态代码 200 :
    Access-Control-Allow-Headers:accept, origin, x-requested-with, content-type
    Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS
    Access-Control-Allow-Origin:*
    Access-Control-Max-Age:15
    Content-Length:0
    

    使用 jQuery,我向这个 url 发出一个 Ajax 请求。例如,这是 OPTIONS 查询的请求 header :
    Accept:*/*
    Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
    Accept-Encoding:gzip,deflate,sdch
    Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
    Access-Control-Request-Headers:accept, origin, x-requested-with, content-type
    Access-Control-Request-Method:POST
    Connection:keep-alive
    Host:127.0.0.1:9100
    Origin:http://127.0.0.1:9000
    Referer:http://127.0.0.1:9000/login
    User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31
    

    这很成功(状态代码:200 OK),然后按预期对 http://127.0.0.1:9100/auth/login 进行 POST,但我在我的网络面板中得到了这个:



    如果我查看控制台,则会收到此错误:



    但是,正如我们所看到的,Access-Control-Allow-Origin 被定义为“*”。我也尝试将其更改为“127.0.0.1:9000”和“http://127.0.0.1:9000”,控制台上出现相同的错误。

    现在,有关我的 jQuery ajax 命令的一些详细信息。 ajax 本身非常简单:
    jQuery.ajax({
        'url': '/auth/login',
        'type': 'POST',
        'data': {'login': 'abc', 'password': 'def'},
        'timeout': 15000
    }).done(function (data, status, xhr) {
        console.log ('ok');
    }).fail(function (xhr, status, description) {
        console.error('oups');
    });
    

    但是 API 的基本 URL 是通过 jQuery.ajaxPrefilter 方法添加的:
    jQuery.ajaxPrefilter (function (options) {
        var url = document.createElement('a');
        url.href = options.url;
        options.url = 'http://127.0.0.1:9000' + url.pathname;
    });
    

    这样做是为了避免在 url 更改时更改多个文件。
    我不知道这是否是问题的根源,但到目前为止,即使有关 CORS 配置的所有内容似乎都没问题,我也无法使 POST 请求有效。

    我做错了什么 ?

    最佳答案

    好吧,其实答案很简单,但你需要知道。

    Headers 不仅可用于 OPTIONS 请求,还可用于所有请求(甚至 GET/POST/PUT/DELETE 请求)。

    这就是为什么它对我不起作用。

    关于jquery - Access-Control-Allow-Origin 不允许 Origin 但定义了通配符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16191524/

    10-11 14:59
    查看更多