Нет ошибки заголовка «Access-Control-Allow-Origin», но заголовок установлен в ответе сервера

Я пытаюсь отправить междоменный запрос, но ответ:

jquery-1.12.2.min.js:4 OPTIONS http://127.0.0.1:8080/ygo/v1/owner/new send @ jquery-1.12.2.min.js:4n.extend.ajax @ jquery-1.12.2.min.js:4LoginViewModel.self.actionLogin @ app.js:17(anonymous function) @ knockout.js:98n.event.dispatch @ jquery-1.12.2.min.js:3r.handle @ jquery-1.12.2.min.js:3
index.html:1 XMLHttpRequest cannot load http://127.0.0.1:8080/ygo/v1/owner/new. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:1010' is therefore not allowed access. The response had HTTP status code 405.
app.js:34 {"login":"admin","password":"admin","autologin":"true"}

Вот мой сценарий (Нокаут):

function Login(data) {
    this.login = ko.observable(data.login);
    this.password = ko.observable(data.password);
    this.autologin = ko.observable(data.autologin);
}

function LoginViewModel() {
    var self = this;
    self.login = ko.observable("admin");
    self.password = ko.observable("admin");
    self.autologin = ko.observable("true");

    self.actionLogin = function() {
        $.ajax({
            type: "post",
            url: "http://127.0.0.1:8080/ygo/v1/owner/new",
            data: ko.toJSON({ login: self.login, password: self.password, autologin: self.autologin }),
            dataType: "json",
            crossDomain: true,
            async: true,
            contentType: "application/json",
            success: function(result) {
                console.log(result)
            },
            error: function(result) {
                console.log(ko.toJSON({ login: self.login, password: self.password, autologin: self.autologin }))
            }

        });
    };

}

ko.applyBindings(new LoginViewModel());

Я использую Python Bottle в качестве примера API локальных заглушек. Это пример кода:

@route('/ygo/v1/owner/new', method='POST')
def index():
    response.content_type = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    login = request.json['login']
    password=request.json['password']
    autologin=request.json['autologin']
    if login=="admin" and password=="admin":
        rs={"Success":True, "info":[]}
    else:
        rs={"Success":False, "info":[{"error":True, "message":"User/Password is incorrect.", "code":10}]}
    return dumps(rs)

Вы видите, что для параметра «Разрешить происхождение» установлено значение «*» в заглушках. Насколько я понимаю, решение состоит в том, что я должен отправить значение «Access-Control-Allow-Origin» в OPTIONS в моем POST-запросе, но я не знаю, как это сделать правильно.


person irider    schedule 15.04.2016    source источник
comment
Вам не нужно помещать заголовки Access-Control-Allow-XXX в запрос, хотя я не могу сказать вам, почему они не распознаются в вашем коде Python.   -  person Rory McCrossan    schedule 15.04.2016
comment
Вы работаете с запросом OPTIONS так же, как с запросом POST, за исключением того, что вы пишете OPTIONS там, где пишете POST.   -  person Quentin    schedule 15.04.2016
comment
Вы абсолютно правы, удалили Access-Control-Allow-Origin и Access-Control-Allow-Methods из моего запроса. Может быть, мне не нужны параметры заголовка в запросе? Насколько я знаю, параметр «crossDomain: true» разрешает междоменные запросы, но не работает.   -  person irider    schedule 15.04.2016