2013-10-26 1 views
3

У меня есть простой веб-сервер 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 сервер отлично работает, так как все тесты скручивания проходят. Что-то не так с кросс-доменным материалом.

+0

Что такое "Браузер"? –

+0

it is chrome 27.0.1453.93 – ducin

+1

crossDomain: true и $ .support.cors = true определенно не нужны, и вы не хотите jsonp, если ваш сервер не возвращает jsonp (в этот момент вам не нужны корсы). также невозможно отправить запрос POST jsonp, поскольку jsonp отправляется с использованием тега скрипта, а не xhr. Ваш первый фрагмент верен. Можете ли вы отправить отправленные заголовки запроса и ответа? (chrome console) –

ответ

1

Вы активируете инструмент CORS ?. Вы можете использовать инструмент, украсив вызывающие методы или настроив его на конфигурацию.

не Учитывая, что реализация PyCachedAdmin является не экспрессируется на вопрос, который я мог бы догадаться, что, вероятно, вы не позволяя инструмент, чтобы сделать это вам просто нужно изменить словарь конфигурации и сделать что-то вроде этого:

cherrypy.quickstart(PyCachedAdmin(), 
         config={ 
          '/': { 
           'request.dispatch': 
            cherrypy.dispatch.MethodDispatcher(), 
           'tools.CORS.on': True}}) 

Или если методы, которые вы используете на PyCacheAdmin, уже украшены или используете _cp_config, что дополнительная настройка не требуется, и эти ответы вам не помогут.