Comment faire pour ignorer les OPTIONS de contrôle en amont d'une demande?
J'avais développé une application PhoneGap qui est maintenant transformé en un site web mobile. Tout fonctionne bien sauf un petit problème. J'utilise un certain tiers API via une requête POST, qui fonctionne très bien dans l'application, mais échoue dans le site web mobile version.
Après avoir regarder de plus près, il semble que AngularJS (je suppose que le navigateur en fait) est d'abord l'envoi d'une demande d'OPTIONS. J'ai appris beaucoup de choses aujourd'hui sur la SCRO, mais je n'arrive pas à comprendre comment le désactiver complètement. Je n'ai pas accès à l'API (donc les changements à côté sont impossible), mais ils ont ajouté le domaine, je suis en train de travailler pour leur Access-Control-Allow-Origin-tête.
C'est le code dont je parle:
var request = {
language: 'fr',
barcodes: [
{
barcode: 'somebarcode',
description: 'Description goes here'
}
]
};
}
var config = {
headers: {
'Cache-Control': 'no-cache',
'Content-Type': 'application/json'
}
};
$http.post('http://somedomain.be/trackinginfo', request, config).success(function(data, status) {
callback(undefined, data);
}).error(function(data, status) {
var err = new Error('Error message');
err.status = status;
callback(err);
});
Comment puis-je empêcher le navigateur (ou AngularJS) à partir de l'envoi de cette demande d'OPTIONS et juste passer à la POST réelle demande? Je suis en utilisant AngularJS 1.2.0.
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
Le contrôle en amont est déclenchée par votre Type de Contenu de
application/json
. La façon la plus simple d'éviter cela est de définir le Type de Contenu pour êtretext/plain
dans votre cas.application/x-www-form-urlencoded
&multipart/form-data
des Types de Contenu sont également acceptables, mais vous aurez bien sûr besoin de formater votre demande en charge de façon appropriée.Si vous voyez toujours un contrôle en amont après cette modification, puis Angulaire peut-être ajouter un en-tête X à la demande aussi bien.
Ou vous pourriez avoir des en-têtes (Autorisation, le Contrôle du Cache,...) qui vont déclencher, voir:
Que ce que Ray a dit, vous pouvez l'arrêter en modifiant le contenu de l'en-tête comme -
Par Exemple -
Ou directement à un appel -
Ce n'enverra pas de pré-vol de l'option de demande.
REMARQUE: Demande ne devraient pas avoir un en-tête personnalisé paramètre, Si l'en-tête de requête contient l'en-tête personnalisé puis navigateur permettra de faire un pré-vol à la demande, vous pouvez l'éviter.
$http
?GET
et un en-tête supplémentaireAuthorization
. Mais encore l'envoi de contrôle en amont.Je pense que la meilleure façon est de vérifier si la requête est de type "OPTIONS" de retour de 200 middle ware. Il a travaillé pour moi.
Lors de l'exécution de certains types d'inter-domaine des requêtes AJAX, les navigateurs qui prennent en charge la SCRO va insérer un supplément de "contrôle en amont" demander pour déterminer s'ils ont l'autorisation d'effectuer l'action.
À partir de l'exemple de requête:
Comme un résultat de ce fragment, nous pouvons voir que l'adresse a été envoyé deux demandes (les OPTIONS possibles et OBTENIR). La réponse du serveur contient les en-têtes de confirmer la validité de la requête GET. Si votre serveur n'est pas configuré pour traiter une demande correctement, les demandes des clients sera un échec. Par exemple:
De contrôle en amont est une web-dispositif de sécurité mis en œuvre par le navigateur. Pour Chrome, vous pouvez désactiver la sécurité sur le web par l'ajout de l'option --disable-web-indicateur de sécurité.
Par exemple: "C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-web-sécurité --user-data-dir="C:\newChromeSettingsWithoutSecurity" . Vous pouvez d'abord créer un nouveau raccourci de chrome, accédez à ses propriétés et changer de cible comme ci-dessus. Cela devrait vous aider!
réglage du type de contenu pour undefined ferait javascript transmettre les données d'en-tête Comme il est , et par rapport à l'écriture par défaut angulaire $httpProvider en-tête de configurations. Angulaire $http Documentation