313 votes

JQuery : Pourquoi suis-je une requête OPTIONS au lieu d’une requête GET ?

Avec ce code http://paulisageek.com/tmp/options.html :

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script>
$.get("http://metaward.com/import/http://metaward.com/u/ptarjan", function(data) {
     alert(data);
});
</script>

dans Firefox 3.5 sur Vista, il ne fait pas de demande d'OPTIONS pour que l'url et puis le callback n'est appelé avec quoi que ce soit.

Quand il n'est pas de la croix de domaine, il fonctionne très bien : http://metaward.com/static/tmp/options.html.

Ne devrait pas Jquery viens de faire l'appel avec un <script> noeud, puis faire le rappel lors de son chargement? Je comprends que je ne vais pas être en mesure d'obtenir le résultat (puisque c'est la croix de domaine), mais c'est ok, je veux juste l'appel à aller de travers. Est-ce un bug ou ai-je fait quelque chose de mal?

EDIT: Il semble que les OPTIONS de la Cross-Origin Resource sharing (SCRO) standard. Voir http://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http-binding-made-easy/ à propos de l'autorisation de la croix de domaine de demandes de.

286voto

arturgrigor Points 1850

Contrôlé demandes

Contrairement à une simple demande (voir ci-dessus), "contrôlé" demande d'envoyer d'abord un HTTP OPTIONS d'en-tête de demande de la ressource sur l'autre domaine, afin de déterminer si la demande est sûr d'envoyer. Les requêtes inter-domaines sont contrôlé comme cela, car ils peuvent avoir des implications pour les données de l'utilisateur. En particulier, une demande est contrôlé si:

Il utilise des méthodes autres que GET ou POST. Aussi, si le POST est utilisée pour envoyer les données de la demande avec un Type de Contenu autre que l'application/x-www-form-urlencoded, multipart/form-data, ou text/plain, par exemple, si la requête POST envoie une charge utile XML au serveur à l'aide de l'application/xml ou texte/xml, alors que la demande est contrôlé. Il définit les en-têtes personnalisés à la demande (par exemple, la demande utilise un en-tête tel que X-PINGOTHER)

Découvrez cette URL pour plus d'informations: https://developer.mozilla.org/en-US/docs/HTTP_access_control

92voto

Paul Tarjan Points 13754

2voto

VoteyDisciple Points 23229

Je ne crois pas jQuery va tout naturellement faire une requête JSONP lorsqu’il est administré une URL comme ça. Il, cependant, un JSONP demandera quand vous lui dites de quel argument à utiliser pour un rappel :

Il est entièrement à la réception script pour faire usage de cet argument (qui n’a pas à être appelé « jsoncallback »), alors dans ce cas la fonction sera appelée jamais. Mais, puisque vous avez déclaré que vous voulez juste le script à metaward.com pour l’exécuter, il s’agirait.

1voto

Adrián Navarro Points 337

En fait, la croix-domaine AJAX (XMLHttp) les demandes ne sont pas autorisés pour des raisons de sécurité (pensez à récupérer un "restreinte" de la page web côté client, et de l'envoyer au serveur ce serait un problème de sécurité).

La seule solution de contournement sont des rappels. Il s'agit de: la création d'un nouveau script de l'objet et de pointage de la src à la fin de JavaScript côté, qui est un rappel avec JSON valeurs (myFunction({données}), myFunction est une fonction qui fait quelque chose avec les données (par exemple, le stocker dans une variable).

0voto

helloandre Points 5784

Il cherche comme Firefox et Opera (testé sur mac aussi bien) n’aime pas la Croix domainness de ce (mais Safari est très bien avec lui).

Vous devrez composer un code de côté serveur local pour boucler la page distante.

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