Détectez la prise en charge du serveur / site pour le domaine croisé XMLHTTPREQUESTS?
-
12-11-2019 - |
Question
Je suis intéressé à voir quel code JavaScript Cross-Browser minimal (jQuery est bien aussi) pourrait être possible pour vérifier si un site que je souhaite envoyer des demandes AJAX à domaine transversal présente une prise en charge de CORS
.
Je sais que jQuery a une méthode pour vérifier si le navigateur le prend en charge. Mais j'aimerais vraiment pouvoir vérifier si le site éloigné le prend également en charge.
Je pensais que je devais juste vérifier un en-tête HTTP, mais bien sûr, le XHR lancera une exception lorsque vous essayez de faire une demande de domaine transversal à un site qui ne le soutienne pas spécifiquement.
Mais y a-t-il un moyen de vérifier qu'une exception lancée par XMLHttpRequest
était dû au fait que le site ne soutient pas CORS
Plutôt que quelque chose d'autre ne va pas? (Il n'a pas à soutenir XDomainRequest.)
Dans tous les cas, je ne suis pas sûr du meilleur moyen de croisement minimal / le plus rapide pour aller chercher un HTTP HEAD
en utilisant Ajax, ce que je suppose est la manière légère plutôt que de récupérer une page, etc.
Cas d'utilisation: une fois que je sais si le navigateur et le fournisseur AJAX soutiennent CORS
ou non, je peux choisir d'envoyer les fonctionnalités JSON
/CORS
demandes ou retomber à JSONP
Demandes lorsque cela est nécessaire.
La solution
Jusqu'au spécification, ce n'est pas possible.
S'il y a une erreur de réseau: dans le cas des erreurs DNS, une défaillance de la négociation TLS ou d'autres types d'erreurs de réseau, appliquez les étapes d'erreur de réseau. Ne demandez aucun type d'interaction utilisateur final ...
Sinon: effectuez une vérification de partage des ressources. S'il renvoie l'échec, appliquez les étapes d'erreur du réseau ...
Il n'y a aucun moyen spécial d'identifier le cas dans lequel CORS n'est pas autorisé, car le Étapes d'erreur de réseau sont appliqués dans tous les cas.