Скажем, у меня есть веб-сервер Tornado (localhost) и веб-страница (othermachine.com), а последний содержит javascript, который должен выполнять междоменные аякс-вызовы на сервере 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 (или и то?) Я не настрою правильно.
В соответствии с инструментами dev они представляют собой заголовки, отправляемые запросом 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
Означает ли это, что Торнадо выполняет свою работу? Я попытался следовать советам всех сообщений CORS + jQuery stackoverflow (например this), безрезультатно. Концепция CORS выглядит достаточно простой, но, возможно, я принципиально неправильно понимаю, что должно произойти в транзакции CORS... пожалуйста, помогите! Спасибо заранее.