web-dev-qa-db-fra.com

Valeur par défaut pour Access-Control-Allow-Methods

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?

23
Paul Draper

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/

24
monsur

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.

7
M Somerville