symfony2 RESTE, AngularJs access-Control-Allow-Origin
d'accord, je suis désespérée. Je suis à l'aide de FOSRestBundle et NelmioCorsBundle
Je reçois toujours ce message d'erreur lorsque j'essaie de publier des données angulaires de serveur différent:
XMLHttpRequest cannot load
http://IP/app_dev.php/api/v1/pages.json.
No 'Access- Control-Allow-Origin' header is present on the requested resource.
Origin 'http://127.0.0.1:9000' is therefore not allowed access.
Remote Address:IP:80
Request URL:http://IP/app_dev.php/api/v1/pages.json
Request Method:OPTIONS
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,sk;q=0.6,cs;q=0.4
Access-Control-Request-Headers:accept, authorization, content-type
Access-Control-Request-Method:POST
Cache-Control:no-cache
Connection:keep-alive
Host:192.168.43.195
Origin:http://127.0.0.1:9000
Pragma:no-cache
Referer:http://127.0.0.1:9000/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
Response Headers
Access-Control-Allow-Headers:X-Requested-With, content-type
Access-Control-Allow-Methods:POST, GET, PUT, DELETE, OPTIONS
Connection:Keep-Alive
Content-Length:573
Content-Type:text/html; charset=iso-8859-1
Date:Sun, 29 Jun 2014 18:07:54 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.4.7 (Ubuntu)
Je suis en train de corriger tout au long de la journée...
Actuellement, j'ai:
# CORS OPTIONS (add this too)
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "X-Requested-With, content-type"
</IfModule>
nelmio_cors:
paths:
'^/api/':
allow_origin: ['*']
allow_headers: ['X-Custom-Auth']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE','OPTIONS']
max_age: 3600
Envoi:
var data = new FormData;
data.append('title', 'title');
data.append('body', 'body');
var request = $http({
method: 'POST',
url: TB+"/app_dev.php/api/v1/pages.json",
headers: {
'Authorization': 'Bearer '+User.getAccessToken(),
'Content-Type': 'application/json'
},
data: data
});
Aucune idée de quel est le problème avec elle s'il vous plaît?
Avez-vous essayé de changer la nelmio de configuration? À partir de la nelmio site web: "allow_origin et allow_headers peut être défini * à accepter n'importe quelle valeur, les méthodes autorisées doivent toutefois être expressément énumérés. les chemins d'accès doivent contenir au moins un article." Donc, vous avez probablement activé juste le X-Custom-en-tête d'Authentification?
Vous devez définir le
vérifier ma réponse
Access-Control-Allow-Origin
en-tête vraiment n'existent pas dans la réponse du serveurVous devez définir le
Access-Control-Allow-Origin
en-tête sur la http://IP/app_dev.php/api/v1/pages.json
serveur. Vous pourriez le faire dans PHP
ou dans un .htaccess
. Vérifiez également vos outils de développement de la demande de contrôle en amont a réussi.vérifier ma réponse
OriginalL'auteur EnchanterIO | 2014-06-30
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire avec NelmioCorsBundle, j'ai résolu avec ces paramètres:
OriginalL'auteur Filo
si vous utilisez chrome, vous devriez mieux obtenir votre esprit de travailler sur une ip localhost. une approche commune est de reverse proxy localhost dans une coutume locale de domaine comme your-domain.com (pour cela, vous devez utiliser un serveur web comme apache ou nginx), reverse proxy, toutes les connexions à votre 127.0.0.1:9000 ip, ont un alias dans /etc/hosts pour 127.0.1.1 your-domain.com et il suffit de lire la documentation symfony pour ajouter des en-têtes personnalisés à votre requête ajax. je suis en supposant que vous avez ici votre ajax routes connecté à un contrôleur, un bon exemple serait de retourner un tableau d'en-têtes comme troisième paramètre
je ne voudrais pas compliquer moi-même beaucoup et utiliser la 3ème partie des plugins que je n'ai aucun contrôle. espérons que cela aide, c'est documenté dans le symfony livre de recettes (http://symfony.com/doc/current/book/http_fundamentals.html)
OriginalL'auteur vortex
allow_headers: '*'
résolu mon problème:Pour moi, l'erreur a été enregistré comme
Unauthorized header content-type
jetés par NelmioCorsBundle. (Je suis en Utilisant la norme Angulaire de dollars de ressources + Symfony +NelmioCorsBundle
setup)NelmioCorsBundle par défaut permet seulement
'accept'
,'accept-language'
,'content-language'
et'origin'
(voir https://github.com/nelmio/NelmioCorsBundle/blob/1.4.0/EventListener/CorsListener.php#L32)L'erreur est levée ici:
https://github.com/nelmio/NelmioCorsBundle/blob/1.4.0/EventListener/CorsListener.php#L158
--
PS: être au courant de la faille de sécurité que vous pouvez ouvrir avec permettant à toute personne d'origine (
*
)OriginalL'auteur Denes Papp
D'accéder à des ressources sur un autre serveur, ce serveur doit déclarer l'Access-Control-Allow-Origin en-tête de réponse ou il ne fonctionnera pas à cause de navigateur politiques de sécurité. Il semble que vous ne sont pas de chargement Nelmio dans votre Simfony app.
OriginalL'auteur bluehallu
Pour moi le problème était dans le réseau en quelque sorte...je pense que... j'ai été la création d'un hotspot mobile... puis sur l'ordinateur (connecté à ce hotspot) était en cours d'exécution du serveur et de mobile, j'ai essayé d'accéder à ce serveur.
Parce que quelques jours plus tard, je viens de configurer le routeur et pas plus de problème avec la SCRO.
OriginalL'auteur EnchanterIO
L'erreur la plus commune que nous faisons ici, c'est que nous incompatibilité de la méthode de type à côté client et côté serveur. Assurez-vous que vous avez le type de méthode "POST" dans les deux angularjs et symfony route..!!!
OriginalL'auteur natu