Est-il possible de faire une demande POST ajax interdomaine d’application / json?

Je teste des éléments de csrf et je me demande s’il est possible de poster une requête ajax entre domaines avec Content-Type: application/json

Chaque fois que j’essaie de faire cela avec jQuery:

  $.ajax({ type: "post", url: "http://someotherdomain.com/endpoint", contentType: "application/json; charset=UTF-8", data: {"a": "1"}, dataType: "json", crossDomain: true, success: function(data){ alert(data); }, failure: function(data){ alert(data); } }); 

J’envoie toujours des requêtes HTTP OPTIONS au lieu de HTTP POST .

Notez que je me fiche de recevoir des données, un message à sens unique est tout ce dont j’ai besoin.

Notez que le type de contenu ne peut pas être x-www-form-urlencoded et qu’il ne peut pas non plus s’agir d’une requête GET.

L’en Content-Type: application/json tête Content-Type: application/json n’est pas un en-tête simple et requirejs donc une requête de contrôle en amont avant la requête réelle. La requête HTTP OPTIONS que vous voyez est la requête de contrôle en amont. De la spécification CORS (http://www.w3.org/TR/cors/):

Un en-tête est considéré comme un simple en-tête si le nom du champ d’en-tête est une correspondance insensible à la casse ASCII pour Accept, Langage d’acceptation ou Content-Language, ou s’il s’agit d’une correspondance insensible à la casse ASCII pour Content-Type et l’en-tête. Le type de média de valeur de champ (à l’exclusion des parameters) est une correspondance ASCII insensible à la casse pour application / x-www-form-urlencoded, multipart / form-data ou text / plain.

Afin de dépasser la demande de contrôle en amont, le serveur doit répondre à la demande OPTIONS avec les en-têtes suivants:

 Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET,PUT,POST,DELETE Access-Control-Allow-Headers: Content-Type 

Une fois que le navigateur a reçu cette réponse, il envoie la requête HTTP POST réelle. Notez que si votre demande contient des en-têtes personnalisés supplémentaires, vous devez les inclure dans l’en-tête de réponse Access-Control-Allow-Headers. Vous pouvez en apprendre plus sur les demandes de contrôle en amont de la SCRO ici:

http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server

Cela est possible si votre navigateur prend en charge le partage de ressources d’origine multiple ( CORS ), et si tous les navigateurs modernes le prennent en charge de nos jours. En bref, le serveur doit vous fournir l’en Access-Control-Allow-Origin tête Access-Control-Allow-Origin .

De plus, en ce qui concerne le fait que, comme vous l’avez dit, vous ne vous souciez pas d’obtenir une information en réponse, pourquoi ne soumettez-vous pas simplement un formulaire?