AngularJS ne détecte pas de Access-Control-Allow-Origin-tête?
Je suis en cours d'exécution angulaire application locale virtualhost (http://foo.app:8000). C'est en faisant une demande à un autre VirtualHost (http://bar.app:8000) à l'aide de $http.post
.
$http.post('http://bar.app:8000/mobile/reply', reply, {withCredentials: true});
Dans l'onglet Réseau des Outils de développement Chrome j'ai bien sûr voir les OPTIONS de demande, et la réponse inclut l'en-tête:
Access-Control-Allow-Origin: http://foo.app:8000
Cependant, le POSTE demande est annulée avec l'erreur suivante:
Pas de "Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée. Origine " http://foo.app:8000 ' est donc pas autorisé à accéder.
Quelqu'un a vécu cette situation? Le Access-Control-Allow-Origin
en-tête est clairement inclus dans la réponse à la demande d'OPTIONS, donc je ne peux pas pour la vie de me comprendre pourquoi la POSTE est en intérim de l'en-tête manquait.
Access-Control-Allow-Credentials
est également mis à true
.
- voyez-vous Access-Control-Allow-Méthodes d'en-tête sur les OPTIONS de réponse?
- En effet. En permettant à toutes les méthodes.
Vous devez vous connecter pour publier un commentaire.
C'est un bug dans chrome locales pour les dev. Essayez de navigateur et d'autres. Puis il va travailler.
Il y a une solution pour ceux qui veulent utiliser google Chrome. Cette extension vous permet de demander à n'importe quel site avec AJAX à partir de n'importe quelle source, car elle ajoute
'Access-Control-Allow-Origin: *'
en-tête de la réponse.Comme alternative, vous pouvez ajouter cet argument à votre lanceur d'applications google Chrome:
--disable-web-security
. Notez que j'avais seulement l'utiliser pour des fins de développement, pas normal de "surfer sur le web". Pour référence, voir Exécuter Chrome avec des Drapeaux.Comme note finale, par l'installation de l'extension mentionnée sur le premier paragraphe, vous pouvez facilement activer/désactiver la SCRO.
J'ai été l'envoi des demandes de angularjs à l'aide de $service http pour bouteille en cours d'exécution sur
http://localhost:8090/
et j'ai du mettre De la SCRO sinon je me suis demande des erreurs du type "Non" Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée"Je l'ai vécu exactement la même question. Pour moi, les OPTIONS de demande, mais la demande POST dirais "avorté." Cela m'a amené à croire que le navigateur n'a jamais été en faisant de la POSTE demande à tous les. Chrome a dit quelque chose comme "Attention provisoire en-têtes sont indiqués" dans les en-têtes de requête, mais pas d'en-têtes de réponse ont été présentés. En fin de compte je me suis tourné vers le débogage sur Firefox qui m'a conduit à découvrir mon serveur répond avec un message d'erreur et pas de la SCRO en-têtes ont été présents sur la réponse. Chrome était en fait la réception de la réponse, mais qui ne permettent pas la réponse à afficher dans la vue du réseau.
chrome://net-internals/#events
pour détecter les erreurs de ce type au lieu d'utiliser Firefox. Juste bon à savoir dans l'avenir. J'ai fait envoyer un bug de Chrome et il a été corrigé depuis un moment, mais je pense qu'on est revenu il. code.google.com/p/chromium/issues/detail?id=343707CROS doit être résolu depuis le côté serveur.
Créer des Filtres selon l'exigence de permettre l'accès et l'ajout de filtres dans web.xml
Exemple à l'aide de printemps:
Classe De Filtre:
Web.xml:
Je viens de tomber sur ce problème aujourd'hui. Il s'est avéré qu'un bug sur le serveur (à l'exception de pointeur null) était la cause de son échec dans la création d'une réponse, mais encore, il a généré un code d'état HTTP 200. Parce que le code d'état 200, Chrome attend une réponse valide. La première chose que Chrome n'a été que de chercher le "Access-Control-Allow-Origin' en-tête, qui n'était pas le trouver. Chrome puis annulé à la demande, et Angulaires m'a donné une erreur. Le bug lors du traitement de la requête POST est la raison pour laquelle les OPTIONS de réussir, mais le POSTE serait un échec.
En bref, si vous voyez ce message d'erreur, il se peut que votre serveur n'a pas renvoyé de tous les en-têtes à tous, en réponse à la requête POST.
Il peut également se produire lorsque vos paramètres sont mal dans la demande. Dans mon cas, je travaille avec une API qui m'a envoyé le message
"Non" Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée. Origine 'null' est donc pas autorisé à accéder. La réponse avait le code d'état HTTP 401."
quand j'ai envoyé un mauvais nom d'utilisateur ou mot de passe avec le POST de demande de connexion.
Les gars si vous rencontrez ce problème dans sails.js il suffit de régler votre cors.js pour inclure l'Autorisation, le permis de l'en-tête
JS: