J'essaie de configurer le partage simple d'origine croisée à l'aide de JQuery (1.7.1) Ajax à moteur sur le serveur client et Apache Servi Python (Django). Selon toutes les instructions que j'ai lues mes en-têtes sont correctement définies, mais je continue à obtenir l'erreur suivante:
xmlhttprequest ne peut pas charger http://myexternaldomain.com/get_data . Origine http: // localhost: 8080 n'est pas autorisé par Access-Control-Autory-Origine. P> blockQuote>
L'en-tête étant j'essaie de (je ne suis pas sûr qu'elle dépasse même le navigateur) Envoyer est: P>
Access-Control-Allow-Origin:* Content-Encoding:gzip Content-Type:text/plain Date:Thu, 08 Mar 2012 15:32:24 GMT Server:Apache/2.2.20 (Ubuntu) Transfer-Encoding:chunked Vary:Accept-Encoding
3 Réponses :
Vous devez mettre en œuvre une demande et une réponse "pré-volées", car votre situation compte en tant que " Pas si simple " demande. Cors de base, qui ne nécessite que l'en-tête d'origine, ne peut avoir que des types de contenu "Application / X-www-Form-URLencodé", "Multipart / Form-Data" et "Texte / Plain". Depuis que vous retournez "Application / JSON", vous ne répondez pas à cette exigence. p>
Je ne sais rien de Django, mais j'ai trouvé plus facile de mettre en œuvre une prise en charge de Cors en dehors de ma demande grâce à l'utilisation d'un Filtre Tomcat . On dirait que vous pouvez faire la même chose avec Django. p>
Assurez-vous que le navigateur est censé prendre soin de la demande de pré-feu ... au moins chrome fait.
Mais le serveur doit le reconnaître. Son script ne répond que des demandes de base en ajoutant l'en-tête d'origine à chaque demande.
J'ai essayé de faire la demande simple, en faisant ma donnée une chaîne simple, en attendant un texte brut dans l'appel de $ .AJAX Appel et retournant MIMETYPE = 'Texte / Plain' dans le Python, mais obtenez toujours les mêmes erreurs.
J'ai également réussi à faire fonctionner avec un serveur compatible Cors public, vous pouvez donc être assez confiant dans le fait que mon problème est le côté du serveur.
Oui, c'est exactement ce que je disais. Votre script côté serveur ne manipule pas le type de requêtes de pré-vol. Sur la base du code que vous avez fourni, votre script fonctionnera uniquement avec les demandes de base de CORS.
En outre, si vous retournez la chaîne '{"FOO": "bar"}' to jQuery comme "texte / plaine", cela pourrait échouer car il reconnaît la chaîne comme JSON. Je ne suis pas sûr de cela, cependant.
Je ne peux pas surestimer la génialité de cette réponse. C'est mort-on.
Alors j'étais en erreur par la réponse d'aller à l'URL et, en fait, le problème était que, lors de la demande Ajax, j'avais un 403 (seulement révélé dans Firefox non chrome) d'erreur en raison de la protection de la CSRF. < / p>
Oh mec, merci beaucoup. J'avais mon Enable_cors Code> wrapper autour de mon
CSRF_Exempé code> wrapper, nécessaire pour les inverser. J'étais comme, wtf ...
J'utilisais l'excellent Django-Cors-Headers Bibliothèque et courut dans ce problème ainsi que. Pour moi, la solution consistait à ajouter «Accepter-coding» au tuple Cors_allow_headers par défaut. p>
J'ai essayé, dans le passé, permettant à Cors des données JSON et n'a jamais été réussi. Cors peut être squameux comme ça. Vous seriez beaucoup mieux mieux de retourner JSON-P.
Vous ne postez que les en-têtes de l'échange final i> entre votre serveur distant et votre client local. Si vous regardez l'échange complet, je suis sûr que vous verrez une demande d'options avec une réponse contenant des en-têtes de méthodes d'accès et d'accès à la commande d'accès.