J'ai un javascript qui effectue un appel "POST" via javascript (pas de bibliothèques) vers un site local fonctionnant sur un port différent. Si ce site utilise une application avec mod_python, cela fonctionne. S'il exécute une application utilisant Tornado - il échoue avec une erreur 405. J'ai été sûr d'implémenter des méthodes post() et options() sur le gestionnaire, et il est toujours en train de commettre des erreurs. Puisque cela fonctionne avec mod_python, cela doit être possible. Quelqu'un sait comment obtenir Tornado pour accepter les demandes de la même adresse IP, mais un port différent? (Je fais cela localement pour les tests, et je m'en fiche des problèmes de sécurité).Requête Ajax avec Python Tornado Obtenir un 405
Répondre
Quelque chose d'étrange se passe ici - mais ce n'est pas ce que vous pensez.
La règle de même origine pour Ajax empêche réellement les demandes d'adresse différente, même si cette adresse diffère simplement par le numéro de port. Voir wikipedia's definition de la politique.
La question est donc de savoir pourquoi la version mod_python fonctionne? Par exemple, êtes-vous sûr que mod_python écoute sur le port que vous pensez qu'il est? À quoi ressemble le Javascript, et comment détermine-t-il où il est publié?
Il serait utile de voir à la fois votre objet RequestHandler, ainsi que la manière dont vous distribuez les URL dans Tornado. À ma connaissance, seules les implémentations de méthode HTTP manquantes ou une définition d'options manquantes() provoqueraient l'émission d'un 405 par 0. tornade
Peut-être que le problème n'est pas que vous n'implémentez pas les bonnes méthodes, mais que l'url vous ' re appel n'est pas envoyé comme vous le pensez.
Que disent les bûches? Exécutez-vous tornade en mode débogage? Pendant que je pose des questions, quelle version de tornade utilisez-vous? Essayez de mettre tornado en mode débogage et ajoutez des messages logging.debug pour vous assurer que votre requête parvienne même à votre RequestHandler, et pour en savoir plus sur ce qui se passe.
Pour exécuter en mode débogage, avec tornado 1.1 (peut-être 1.0? Ne me souviens pas), vous pouvez simplement démarrer votre application avec '--logging = debug'. En supposant que vous avez des appels logging.debug dans votre gestionnaire, vous obtenez des messages :)
Voici un gestionnaire d'exemple en utilisant la démo helloworld.py inclus:
class MainHandler(tornado.web.RequestHandler):
def get(self):
logging.debug("I'm in ur hndlrz, runnin yr codez")
self.write("Hello, world")
Voici la sortie du journal:
furby:helloworld jonesy$ ./helloworld.py --logging=debug
[D 101207 16:12:34 helloworld:28] I'm in ur hndlrz, runnin yr codez
[I 101207 16:12:34 web:849] 200 GET/(127.0.0.1) 1.03ms
[W 101207 16:12:34 web:849] 404 GET /favicon.ico (127.0.0.1) 0.34ms
- 1. Comment obtenir l'IP client d'une requête Tornado?
- 2. Requête COMET asynchrone avec Tornado et Prototype
- 3. Mise en route avec Tornado
- 4. Problèmes avec Tornado serveur Web
- 5. plusieurs répertoires statiques en Python Tornado
- 6. Tornado ou Django fonctionne avec CGI?
- 7. Démarrage de Tornado Web
- 8. Aide avec une requête AJAX
- 9. Comment obtenir des données de requête Ajax avec jQuery?
- 10. Python Tornado Web - AttributeError: l'objet 'Connection' n'a pas d'attribut '_execute'
- 11. IIS 405 .. server.tas fichier
- 12. Tornado Request Handler
- 13. nginx-tornado-django demande timeout
- 14. Comment puis-je obtenir la mécanisation de Python pour POSTER une requête ajax?
- 15. requête http python avec jeton
- 16. Classic ASP Erreur 405
- 17. WCF La requête a échoué avec l'état HTTP 405: Méthode non autorisée
- 18. Comment intégrer Disqus à un site compatible Facebook Connect (application python Tornado)
- 19. sélection par défaut avec requête ajax jquery
- 20. Envoi d'une requête POST avec l'URI de la requête '/' au serveur Web Cassini entraînant une erreur 405. Pourquoi?
- 21. Rails 405 Méthode non autorisée
- 22. obtenir des données de querystring avec python
- 23. Obtenir plusieurs valeurs par le biais d'une requête AJAX
- 24. Subversion (SVN) Propfind erreur 405
- 25. Comment configurer plusieurs sites web avec django et tornado?
- 26. envoyer une requête ajax
- 27. Obtenir des données Python à partir d'une application AJAX asp.net
- 28. Obtenir la dernière requête ajax et d'abandonner les autres
- 29. Comment puis-je extraire des données avec une requête ajax?
- 30. Obtenir les résultats php avec jquery ajax
Il ne semble pas que cela fonctionne, cela fonctionne. mod_python écoute sur le port 9000. Le test js est servi depuis le port 8000. Le code Tornado écoute sur 9001. La seule chose que je peux penser, c'est que puisque le code de test passe par la même instance d'apache, il fonctionne malgré les différences de port. Mais c'est un coup de couteau dans le noir de ma part. – Dan