Je viens d'apprendre le Access-Control-Allow-Methods
en-tête, par exemple.
Access-Control-Allow-Methods: OPTIONS, HEAD, GET
Je n'ai jamais utilisé cet en-tête (juste Access-Control-Allow-Origin
), mais j'ai réussi à faire fonctionner CORS par le passé.
La valeur par défaut est-elle d'autoriser toutes les méthodes, ou ai-je eu de la chance avec un comportement non défini?
Juste pour clarifier, Access-Control-Request-Method
est un en-tête de demande défini par le navigateur sur les demandes de contrôle en amont CORS, et il ne peut avoir qu'une seule valeur. Le Access-Control-Allow-Methods
header est un en-tête de réponse CORS, et il peut avoir plusieurs valeurs. Je suppose que vous posez des questions sur Access-Control-Allow-Methods
car il s'agit de la valeur spécifiée par le serveur.
Le Access-Control-Allow-Methods
l'en-tête indique les méthodes HTTP autorisées sur un point de terminaison particulier pour les demandes d'origine croisée. Si vous autorisez toutes les méthodes HTTP, vous pouvez définir la valeur sur quelque chose comme Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD
. Cependant, si vous souhaitez limiter le point de terminaison à seulement quelques méthodes, vous devez uniquement inclure ces méthodes.
Quant à savoir pourquoi vous ne l'avez pas vu auparavant, cet en-tête est uniquement utilisé sur les demandes de contrôle en amont CORS. Il se peut que votre application n'ait pas utilisé le contrôle en amont CORS, puis quelque chose a changé pour déclencher un contrôle en amont. Votre application utilise-t-elle des méthodes HTTP autres que GET/POST ou des en-têtes HTTP personnalisés?
Vous pouvez en savoir plus sur les demandes de contrôle en amont CORS ici: http://www.html5rocks.com/en/tutorials/cors/
La valeur par défaut de Access-Control-Allow-Methods
consiste à autoriser toutes les méthodes simples, même sur les demandes de contrôle en amont. Comme le dit le flux https://www.w3.org/TR/cors/#preflight-request (étape 7 de la demande de contrôle en amont réussie):
Si la méthode de demande n'est pas une correspondance sensible à la casse pour une méthode des méthodes et n'est pas une méthode simple, appliquez les étapes d'erreur de cache et de réseau.
Et la définition de la méthode simple est:
Une méthode est considérée comme une méthode simple s'il s'agit d'une correspondance sensible à la casse pour l'un des éléments suivants: GET HEAD POST
Donc, si vous avez une demande de contrôle en amont POST (en raison d'un en-tête HTTP personnalisé, par exemple), et n'envoyez pas de Access-Control-Allow-Methods
en-tête de réponse, la demande se poursuivra.