簡體   English   中英

Access-Control-Allow-Origin不允許Origin,但定義了通配符?

[英]Origin is not allowed by Access-Control-Allow-Origin but wildcard is defined?

我正在開發一個項目(前端),它將與另一個域中的另一個(API)進行通信。

現在,我正在本地工作,具有以下配置:

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

在我的API程序中,我定義了一個OPTIONS請求,它返回這些標頭以及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查詢的Request標頭:

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,但我在網絡面板中得到了這個:

狀態:已取消| 類型:待定

如果我查看控制台,我收到此錯誤:

XMLHttpRequest無法加載http://127.0.0.1:9100/auth/login Access-Control-Allow-Origin不允許來源http://127.0.0.1:9000

但是,正如我們所看到的,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');
});

但是,通過jQuery.ajaxPrefilter方法添加API的基本URL:

jQuery.ajaxPrefilter (function (options) {
    var url = document.createElement('a');
    url.href = options.url;
    options.url = 'http://127.0.0.1:9000' + url.pathname;
});

這是為了避免在URL更改時更改多個文件。 我不知道這是否是問題的根源,但到目前為止我無法使POST請求工作,即使有關CORS配置的一切似乎都沒問題。

我做錯了什么 ?

好的答案其實很簡單,但你需要知道。

Headers不僅可以在OPTIONS請求中使用,而且可以在所有請求上使用(甚至是GET / POST / PUT / DELETE請求)。

這就是為什么它不適合我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM