106 votes

CORS - Comment "contrôler en amont" une requête http?

Je suis attachant à faire une croix domaine de la requête http de service WCF (que je possède). J'ai lu plusieurs techniques pour travailler autour de la croix de domaine de script limites. Parce que mon service doit accueillir à la fois GET et POST demandes je ne peut pas mettre en œuvre certaines dynamiques balise de script dont le src est l'url d'une requête GET. Depuis que je suis libre de faire des changements sur le serveur j'ai commencé à essayer de mettre en œuvre une solution de contournement consiste à configurer le serveur réponses à inclure la, "Access-Control-Allow-Origin" en-tête et de contrôle les demandes de avec et OPTIONS de demande. J'ai eu l'idée de ce post : l'Obtention de la SCRO de travail

Sur le côté serveur, ma méthode web est l'ajout de " Access-Control-Allow-Origin: *' à la réponse http. Je vois que les réponses ne comprennent cet en-tête maintenant. Ma question est: Comment puis-je "contrôle en amont" une demande (OPTIONS)? Je suis à l'aide de jQuery.getJSON pour faire la demande, mais le navigateur annule la demande tout de suite avec le tristement célèbre:

Origine http://localhost n'est pas autorisé par Access-Control-Allow-Origin

Est ce que quelqu'un familier avec cette technique de la SCRO? Quels changements doivent être apportés au client en amont de ma demande?

Merci!

168voto

monsur Points 8340

Lors de la demande de contrôle en amont, vous devriez voir les deux en-têtes de: Contrôle d'Accès-à la Demande de la Méthode et de Contrôle d'Accès-Request-Headers. Ces en-têtes de requête demandez au serveur pour les autorisations pour faire la demande réelle. Votre contrôle en amont de la réponse doit reconnaître ces en-têtes pour que la demande réelle de travail.

Par exemple, supposons que le navigateur fait une requête avec les en-têtes suivants:

Origin: http://yourdomain.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-Custom-Header

Votre serveur devrait alors répondre avec les en-têtes suivants:

Access-Control-Allow-Origin: http://yourdomain.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: X-Custom-Header

Portez une attention particulière à l'Access-Control-Allow-en-tête en-tête de réponse. La valeur de cet en-tête doit être le même en-têtes dans le Contrôle d'Accès-Request-Headers-tête de la requête, et il ne peut pas être '*'.

Une fois que vous envoyer cette réponse à la demande de contrôle en amont, le navigateur va faire la demande réelle. Vous pouvez en apprendre plus sur la SCRO ici: http://www.html5rocks.com/en/tutorials/cors/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X