Вишня / JQuery CORS неприятности
У меня есть простой веб-сервер на Python, основанный на cherrypy. Его ресурсы должны предоставлять API. Сервер имеет следующий код для обеспечения CORS:
def CORS():
cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"
if __name__ == "__main__":
cherrypy.tools.CORS = cherrypy.Tool('before_finalize', CORS)
cherrypy.quickstart(PyCachedAdmin(), config={'/': {'request.dispatch': cherrypy.dispatch.MethodDispatcher()}})
сервер работает на локальном хосте:8080. Теперь у меня есть HTML-файл, доступный на localhost (порт 80 по умолчанию), который загружает jquery 1.9. Я открываю консоль браузера, чтобы попробовать $.ajax
выполнить любой AJAX-запрос к серверу cherrypy. Я пытался:
$.ajax({
url:'http://localhost:8080/',
type: "POST",
dataType: "json",
data: {command:"version"}
}).done(function(){
console.log('hej');
});
а также
$.ajax({
url:'http://localhost:8080/',
type: "POST",
crossDomain: true,
dataType: "jsonp",
data: {command:"version"}
}).done(function(){
console.log('hej');
});
а также
$.support.cors = true
и ничего не получалось. Я получаю либо XMLHttpRequest cannot load http://localhost:8080/. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
или же GET http://localhost:8080/?callback=jQuery19102827550224028528_1382823727186&command=version&_=1382823727187 404 (Not Found)
при использовании jsonp (загадочно, что он отправляет GET вместо POST). Есть несколько похожих вопросов, я попробовал их, и это мои результаты (что-то все еще не так).
PS с сервером все в порядке, так как все тесты на керлинг проходят. Что-то не так с междоменными вещами.
1 ответ
Вы активируете инструмент CORS? Вы можете использовать инструмент, украшая методы вызова или установить его в конфигурации.
Учитывая, что реализация PyCachedAdmin
не выражен в вопросе, я могу предположить, что, вероятно, вы не активируете инструмент, для этого вам просто нужно изменить словарь конфигурации и сделать что-то вроде этого:
cherrypy.quickstart(PyCachedAdmin(),
config={
'/': {
'request.dispatch':
cherrypy.dispatch.MethodDispatcher(),
'tools.CORS.on': True}})
Или если методы, которые вы используете на PyCacheAdmin
уже был оформлен или использует _cp_config
что дополнительная настройка не требуется, и эти ответы не помогут вам.