У меня есть простой веб-сервер python, основанный на черри. Его ресурсы должны предоставлять API. Сервер имеет следующий код для предоставления CORS:cherrypy/jquery 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()}})
сервер работает на localhost: 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 сервер отлично работает, так как все тесты скручивания проходят. Что-то не так с кросс-доменным материалом.
Что такое "Браузер"? –
it is chrome 27.0.1453.93 – ducin
crossDomain: true и $ .support.cors = true определенно не нужны, и вы не хотите jsonp, если ваш сервер не возвращает jsonp (в этот момент вам не нужны корсы). также невозможно отправить запрос POST jsonp, поскольку jsonp отправляется с использованием тега скрипта, а не xhr. Ваш первый фрагмент верен. Можете ли вы отправить отправленные заголовки запроса и ответа? (chrome console) –