La SCRO - Comment faire "contrôle en amont" une httprequest?
Je suis en train de faire une croix domaine de la requête HTTP de service WCF (que je possède). J'ai lu plusieurs techniques pour travailler avec le cross domain scripting 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 le "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 quiconque est familier avec cette technique de la SCRO? Quels changements doivent être apportés au client en amont de ma demande?
Merci!
Vous devez vous connecter pour publier un commentaire.
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:
Votre serveur devrait alors répondre avec les en-têtes suivants:
Accorder 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/
Access-Control-Allow-Origin: *
//cors and preflight filtering app.all('*', function(req, res, next){.. //preflight needs to return exact request-header res.set('Access-Control-Allow-Headers', req.headers['access-control-request-headers']); if ('OPTIONS' == req.method) return res.send(204);next(); });
boomerang
, Mais ne marche pas quand j'essaie de localhost . Pourquoi est-ce ?Origin
/Referer
header? En fait, le serveur va avoir à faire de toute façon, quel est donc le point de ces des en-têtes supplémentaires?Bien que ce fil remonte à 2014, la question peut encore être d'actualité pour beaucoup d'entre nous. Voici comment j'ai traité dans un jQuery 1.12 /PHP 5.6 contexte:
PHP exemple de Code:
En particulier, ne pas ajouter une
exit;
comme aucun contrôle en amont est nécessaire.