Travaillez avec Postman, mais pas avec Ajax?

Je tente de faire une demande GET simple à partir d'un serveur hébergeant certaines données de compte. La requête nécessite un en-tête Autorisation pour fonctionner correctement. J'ai effectué la requête GET et récupéré les données avec succès dans Postman, mais je tente de le faire en Javascript via Ajax résulte d'une erreur "Code d'état HTTP 405 non valide".

Voici un lien vers une violoncelle et une capture d'écran des paramètres de Postman. Merci.!

$.ajax({ beforeSend: function(xhrObj){ xhrObj.setRequestHeader("Authorization","Bearer tj7LTLycpQC6DRup5BkHUO7uVbYaAZI40"); }, type: "GET", url: "https://api05.iq.questrade.com/v1/accounts", success: function(e){ console.log(e) } }); 

Http://jsfiddle.net/Ldjbp2j8/1/

RÉGLAGES POSTMAN

À partir de la console JS de Chrome:

Impossible de charger la ressource: le serveur a répondu avec un état de 405 (méthode non autorisée)

Parce que vous ajoutez un en-tête d'autorisation, vous avez complété la requête. Cela requiert que le navigateur effectue une demande d'OPTIONS de vérification préalable pour demander l'autorisation d'envoyer la requête complexe.

Le serveur sur lequel vous faites la demande répond en disant que les demandes OPTIONS ne sont pas autorisées sur cette URL.

Vous devrez modifier le serveur afin qu'il réponde de manière appropriée à la requête CORS avant vol.


Postman n'a pas besoin de faire une demande de pré-vol, car votre navigateur fait confiance au code de Postman. Il ne sait pas s'il peut faire confiance au code qu'il a reçu de JSFiddle (AKA potentiel evil hacker site ) avec les données api05.iq.questrade.com (AKA potentiel en ligne ou le site Intranet de l'entreprise ) est prêt à partager avec lui.

Regardez les erreurs de la console:

 XMLHttpRequest cannot load https://api05.iq.questrade.com/v1/accounts. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access. The response had HTTP status code 405. 

C'est le problème du CORS. Les navigateurs ont envoyé OPTIONS aka demande avant vol au serveur si le domaine ne correspond pas au domaine du code en cours d'exécution. Et vous devez également ajouter les en-têtes requis aux réponses.

Vous devez modifier le serveur pour gérer cela.

Vous pouvez également utiliser JSONP comme alternative.