кросс -совместное использование исходных ресурсов (CORS )с jQuery и Tornado

Допустим, у меня есть веб-сервер Tornado (localhost )и веб-страница (othermachine.com ), и последняя содержит javascript, который должен выполнять междоменные ajax-вызовы -к серверу Tornado..

Так что я настроил свой Tornado как таковой:

class BaseHandler(tornado.web.RequestHandler):
    def set_default_headers(self):
        self.set_header("Access-Control-Allow-Origin", "http://www.othermachine.com")
        self.set_header("Access-Control-Allow-Credentials", "true")
        self.set_header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS")
        self.set_header("Access-Control-Allow-Headers",
            "Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, X-Requested-By, If-Modified-Since, X-File-Name, Cache-Control")

И мой javascript делает вызов jQuery:

$.ajax({
    type: 'GET',
    url: "http://localhost:8899/load/space",
    data: { src: "dH8b" },
    success: function(resp){
        console.log("ajax response: "+resp);
    },
    dataType: 'json',
    beforeSend: function ( xhr ) {
        xhr.setRequestHeader('Content-Type', 'text/plain');
        xhr.setRequestHeader('Access-Control-Request-Method', 'GET');
        xhr.setRequestHeader('Access-Control-Request-Headers', 'X-Requested-With');
        xhr.withCredentials = true;
    }
});

Но я получаю прекрасную ошибку XMLHttpRequest cannot load http://localhost:8899/load/space?src=dH8b. Origin http://www.othermachine.com is not allowed by Access-Control-Allow-Origin. Я не могу сказать, какая сторона jQuery / Tornado (или обе? )Я неправильно настроил.

Согласно инструментам разработки, это заголовки, которые отправляет запрос jQuery :

. Заголовки запроса

Accept:*/*
Origin:http://www.othermachine.com
Referer:http://www.othermachine.com/athletes.html?src=BCYQ&msgid=6xjb
User-Agent:Mozilla/5.0...

Если я просто сделаю запрос из поля URL-адреса моего браузера, я получу «200 OK» с этим:

Заголовки ответов

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type, User-Agent, X-Requested-With, X-Requested-By, Cache-Control
Access-Control-Allow-Methods:GET,POST
Access-Control-Allow-Origin:http://www.othermachine.com
Content-Length:0
Content-Type:text/html; charset=UTF-8
Server:TornadoServer/2.2.1

Означает ли это, что Tornado выполняет свою работу? Я пытался следовать советам всех сообщений CORS + jQuery (stackoverflow, например. это), но безрезультатно. Концепция CORS кажется достаточно простой, но, возможно, я в корне неправильно понимаю, что должно происходить в транзакции CORS... пожалуйста, помогите! Заранее спасибо.

19
задан Community 23 May 2017 в 12:22
поделиться