Flacon Reposante de la croix-problème de domaine Angulaire: METTRE, les OPTIONS de méthodes
J'ai développé une petite écriture seule api REST avec Flacon Restful qui accepte de METTRE de la demande à partir d'une poignée de clients qui peuvent potentiellement avoir le changement d'adresse IP. Mes clients sont incorporés Chrome clients exécutant un AngularJS front-end; ils s'authentifier avec mon API avec une simple clé magique -- c'est suffisant pour mon échelle très limitée.
Je suis en essais déploiement de mon API maintenant et je remarque que l'angle de clients tentent d'envoyer une des OPTIONS http méthodes à ma Gourde de service. Mon API est quant à lui envoyant un 404 (puisque je n'ai pas d'écrire un gestionnaire d'OPTIONS encore, seulement un PUT gestionnaire). Il semble que lors de l'envoi de requêtes inter-domaine qui ne sont pas des POST ou GET, Angulaire enverra un pré-OPTIONS de vol de la méthode sur le serveur, assurez-vous que le cross-domain demande est acceptée avant d'envoyer la demande réelle. Est ce que le droit?
De toute façon, comment puis-je permettre à tous les cross-domain METTRE les demandes de Flacon API Restful? J'ai utilisé de la croix-domaion décorateurs avec un (non-sommeil) Fiole de l'instance avant, mais dois-je écrire un gestionnaire d'OPTIONS ainsi dans mon API?
Vous devez vous connecter pour publier un commentaire.
Avec le Flacon de la SCRO module, vous pouvez faire des requêtes inter-domaine sans changer votre code.
Mise à jour
Comme Eric suggéré, le
flask.ext.cors
module est maintenant obsolète, vous devriez plutôt utiliser le code suivant:Vous pouvez utiliser le after_request crochet:
Vérifier ce tutoriel pour plus de détails - http://tutsbucket.com/tutorials/building-a-blog-using-flask-and-angularjs-part-1/
J'ai résolu le problème par une réécriture de ma Gourde backend de répondre avec un Access-Control-Allow-Origin-tête dans ma METTRE de la réponse. En outre, j'ai créé un gestionnaire d'OPTIONS dans mon Flacon d'application pour répondre à la méthode des options en suivant ce que j'ai lu dans le http RFC.
Le retour sur la méthode PUT ressemble à ceci:
Mes OPTIONS gestionnaire de méthode ressemble à ceci:
@tbicr est droit: Flacon répond à la méthode des OPTIONS automatiquement pour vous. Cependant, dans mon cas, ce n'était pas la transmission de l'Access-Control-Allow-Origin-tête avec cette réponse, donc, mon navigateur a été d'obtenir une réponse à partir de l'api qui semble impliquer que les requêtes inter-domaine n'ont pas été autorisés. J'ai surchargé la demande d'options dans mon cas, et a ajouté que l'ACAO-tête, et le navigateur semble s'en contenter, et dans le suivi des OPTIONS avec un METTRE qui a également travaillé.
Vous avez raison,
OPTIONS
méthode est appelée à chaque fois avant que la demande dans le navigateur.OPTIONS
réponse ont permis à des méthodes et des en-têtes. Flacon de traiter automatiquement lesOPTIONS
demandes.Pour obtenir l'accès de la croix de domaine vous demande de l'API doit avoir
Access-Control-Allow-Origin
en-tête. Il peut contenir des domaines spécifiques, mais si vous voulez autoriser les demandes de tous les domaines qui vous permet de l'Access-Control-Allow-Origin: *
.Pour configurer la SCRO pour
flask
vous pouvez regarder un code d'extension ou d'essayer d'utiliser cette extension: https://github.com/wcdolphin/flask-cors/blob/master/flask_cors.py.Pour configurer la SCRO pour
flask-restful
look, ce pull requests: https://github.com/twilio/flask-restful/pull/122 et https://github.com/twilio/flask-restful/pull/131. Mais on dirait queflask-restful
ne le supporte pas par défaut encore.Comment sur cette solution de contournement:
J'ai pris cette de cette tutoriel. Fonctionne très bien. en fait, je pense que c'est la meilleure approche que j'ai vu jusqu'à présent.
Retour
{'Access-Control-Allow-Origin': '*'}
sur chaque point de terminaison, ne semble pas être efficace car vous devez l'ajouter sur chaque extrémité. un peu souvent embêtant..., au moins pour moi.J'ai essayé
@cors.crossdomain(origin='*')
mais, on dirait qu'il ne fonctionne qu'avec OBTENIR demande.Juste une mise à jour pour ce commentaire. Flacon de la SCRO est le chemin à parcourir, mais le ballon.ext.la scro est obsolète.
utilisation:
from flask_cors import CORS
Je tiens à utiliser une décoration à résoudre.
Et puis, les Utiliser dans la décoration de votre api restful.
À distance de la SCRO demandes sur votre api de service web, vous pouvez simplement initialiser votre ballon API restful comme ceci:
Cela ajoute de la SCRO en-tête de votre api instance et permet une SCRO demande sur chaque chemin d'accès de chaque origine.