Récemment, je suis tombé sur un problème avec la demande CORS (Cross Origin Resource Sharing) sur Safari, OSX et iOS, alors que la même demande fonctionnait parfaitement sur Chrome et Firefox. Je suis la documentation du W3C et je traite les requêtes de contrôle en amont côté serveur, ma réponse est la suivante:
HTTP/1.0 200 OK
Access-Control-Allow-Origin: http://192.168.1.96:4399
Access-Control-Allow-Methods: POST
Access-Control-Allow-Methods: GET
Access-Control-Allow-Methods: OPTIONS
Access-Control-Allow-Headers: Origin
Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Allow-Headers: Accept
Access-Control-Allow-Headers: Access-Control-Request-Method
Access-Control-Allow-Headers: Access-Control-Request-Headers
Access-Control-Allow-Headers: DNT
Access-Control-Allow-Headers: X-CustomHeader
Access-Control-Allow-Headers: Content-Type
Access-Control-Max-Age: 0
Date: Fri, 25 Nov 2016 08:45:25 GMT
Origin: http://192.168.1.96:4399
Access-Control-Expose-Headers: Origin
Content-Encoding: gzip
Transfer-Encoding: chunked
Une telle réponse fonctionne correctement sur les navigateurs Chrome, Firefox et Android: une demande POST est envoyée juste après la demande de contrôle en amont. Mais sur Safari, après la réponse du serveur à la demande de mise à jour, j'ai reçu un tel message d'erreur de la console:
Failed to load resource: The network connection was lost.
J'inspecte la réponse de contrôle en amont du serveur, mais je la trouve identique à celle ci-dessus ... Après avoir cherché et essayé tant de fois, je ne peux toujours pas le faire fonctionner :-(
Est-ce que quelqu'un a déjà rencontré le problème? Quelqu'un pourrait-il comprendre quelle erreur j'ai commise?
Merci d'avance!
Tout est à propos de Safari. Ajoutez Origin
à l’en-tête de la requête OPTIONS Access-Control-Request-Headers
.
Donc, pour résoudre ce problème, vous devez activer cet en-tête dans Access-Control-Allow-Headers
en réponse.
PS: voir question similaire Demande CORS ne fonctionnant pas dans Safari