web-dev-qa-db-fra.com

Safari 10.1: XMLHttpRequest avec des paramètres de requête ne peut pas être chargé en raison de contrôles de contrôle d'accès

Lors de l’essai d’une requête CORS sur Safari 10.1, sur une URL comportant des paramètres de requête (par exemple, https://example.com/api?v=1 ), Safari déclare

XMLHttpRequest ne peut pas être chargé en raison de contrôles de contrôle d'accès

Chrome/Firefox fonctionnent bien.

Sur les demandes de page sans "? V = 1", Safari fonctionne également très bien.

J'ai essayé de changer l'en-tête de réponse du serveur de

Access-Control-Allow-Origin: https://example.com

à

Access-Control-Allow-Origin: https://example.com/api?v=1

mais cela casse Chrome.

Aucune suggestion?

21
Marius Andreiana

Essayer de suivre pourrait marcher - 

Access-Control-Allow-Origin: <Origin> | *
2
mdeora

Vous rencontrez des problèmes avec la SCRO.

Quelques causes possibles:

  • L'en-tête Access-Control-Allow-Origin ne peut être défini que côté serveur, pas dans le script de votre client. (Vous n'avez pas précisé que vous l'avez fait correctement.)
  • Êtes-vous sûr que le protocole (http vs https vs peut-être même file) est exactement le même? 
  • Si vous avez plusieurs sous-domaines, vous devez configurer votre configuration (Apache, par exemple) avec quelque chose comme "^http(s)?://(.+\.)?test\.com$.
    Le ^ marque le début de la ligne pour empêcher quoi que ce soit qui précède cette URL. Vous avez besoin d'un protocole et permettant les deux ici. Un sous-domaine est facultatif. Et le $ marque la fin de la ligne (vous n'avez pas besoin de définir des sous-pages, car Origin est uniquement basé sur l'hôte).
  • Comme indiqué ici , ajouter Access-Control-Allow-Headers: Origin à la configuration du serveur peut également constituer une solution. Essayez de comparer les requêtes réelles de Safari avec les requêtes réussies de Firefox ou de Chrome pour repérer également les en-têtes manquants (et peut-être les comparer à la configuration de votre serveur).
1
Seika85