Je cherchais les raisons de sécurité spécifiques expliquant pourquoi cela avait été ajouté. C'était un peu le moment WTH lorsque j'ai implémenté cors et que je pouvais voir tous les en-têtes renvoyés, mais je ne pouvais pas y accéder via JavaScript.
La CORS est mise en œuvre de manière à ne pas briser les hypothèses formulées dans le monde antérieur à la CORS, à origine identique.
Dans le monde antérieur à CORS, un client pouvait déclencher une demande d'origine croisée (par exemple, via une balise de script), mais ne pouvait pas lire les en-têtes de réponse.
Afin de garantir que CORS ne casse pas cette hypothèse, la spécification CORS exige que le serveur donne des autorisations explicites au client pour lire ces en-têtes (via l'en-tête Access-Control-Expose-Headers
). De cette façon, les demandes CORS non autorisées se comportent comme dans un monde pré-CORS.
C'est une très bonne question. En parcourant http://www.w3.org/TR/cors/#simple-response-header , il n’est pas évident de comprendre pourquoi vous voulez ou devez faire cela.
La spécification CORS donne beaucoup de poids à l’idée que vous devez avoir une poignée de main de pré-demande dans laquelle le client demande un type de connexion et le serveur répond qu’il le permettra. .
Par défaut, content-length n'est pas un en-tête autorisé. Je me suis donc retrouvé confronté au même problème (plus tard, lorsque je devais accéder à WebDAV et que je devais modifier les paramètres autorisés). ) en premier lieu, donc cela ne me surprendrait pas si des bandes capricieuses sont capricieuses.
Voici la raison pour laquelle les en-têtes de contrôle d'accès sont nécessaires:
En-têtes de contrôle d'accès (facultatif) - L'objet XMLHttpRequest 2 a une méthode getResponseHeader () qui renvoie la valeur d'un en-tête de réponse particulier. Lors d'une demande CORS, la méthode getResponseHeader () ne peut accéder qu'aux en-têtes de réponse simples. Les en-têtes de réponse simples sont définis comme suit:
Si vous souhaitez que les clients puissent accéder à d'autres en-têtes, vous devez utiliser l'en-tête Access-Control-Expose-Headers. La valeur de cet en-tête est une liste délimitée par des virgules des en-têtes de réponse que vous souhaitez exposer au client.
pour plus de références, veuillez creuser dans le lien https://www.html5rocks.com/fr/tutorials/cors/
Bonne codage !!