La valeur par défaut pour Access-Control-Allow-Méthodes
Je viens d'apprendre sur le Access-Control-Allow-Methods
en-tête, par exemple
Access-Control-Allow-Methods: OPTIONS, HEAD, GET
Je n'ai jamais utilisé cette en-tête (juste Access-Control-Allow-Origin
), mais j'ai eu de la SCRO à travailler dans le passé.
Est la valeur par défaut pour permettre à toutes les méthodes, ou ai-je eu de la chance avec un comportement indéfini?
Cela semble une très bonne chose à faire pour laisser le navigateur arrêt inutile demandes de jamais déranger votre serveur web.
OriginalL'auteur Paul Draper | 2013-12-09
Vous devez vous connecter pour publier un commentaire.
Juste pour clarifier,
Access-Control-Request-Method
est un en-tête de requête qui est définie par le navigateur de la SCRO de contrôle en amont des demandes, et il ne peut avoir qu'une seule valeur. LeAccess-Control-Allow-Methods
en-tête est un CORS en-tête de réponse, et il peut avoir plusieurs valeurs. Je suppose que vous posez surAccess-Control-Allow-Methods
parce que c'est la valeur que le serveur spécifie.La
Access-Control-Allow-Methods
en-tête qui indique les méthodes HTTP sont admis sur un point de terminaison de la croix-de l'origine des demandes. Si vous permettre à toutes les méthodes HTTP, alors que son ok pour définir la valeur à quelque chose commeAccess-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD
. Cependant, si vous souhaitez limiter le point de terminaison à seulement quelques méthodes, vous ne devriez inclure ces méthodes.Pourquoi vous ne l'avez pas vu cela avant, cet en-tête est utilisé uniquement sur les CORS de contrôle en amont des demandes. Il se peut que votre application n'utilise pas la SCRO de contrôle en amont, et puis quelque chose a changé pour déclencher un contrôle en amont. Ne vous demande d'utiliser toutes les méthodes HTTP autres que GET et POST, ou toutes les en-têtes HTTP personnalisés?
Vous pouvez en apprendre plus sur la SCRO de contrôle en amont demandes ici: http://www.html5rocks.com/en/tutorials/cors/
Répondu à ma question: "cet en-tête est utilisé uniquement sur les CORS de contrôle en amont des demandes".
où l'on peut voir la valeur de ces en-têtes? Dans mon cas, j'ai besoin d'envoyer un jeton dans l'en-tête, mais je peux voir seulement n'est pas le nom de la valeur
comme je vois quelque chose comme Contrôle d'Accès-Request-Headers: dauth,type de contenu . Pas de valeur pour Dauth @monsur@paul
OriginalL'auteur monsur
La valeur par défaut de
Access-Control-Allow-Methods
est de permettre à travers toutes les méthodes simples, même sur le contrôle en amont des demandes. Comme le flux sur https://www.w3.org/TR/cors/#preflight-request dit (étape 7 de succès de la demande de contrôle en amont):Et la définition de la méthode est simple:
Donc si vous avez un contrôlé requête POST (en raison d'un en-tête HTTP personnalisé, par exemple), et ne pas envoyer un
Access-Control-Allow-Methods
en-tête de réponse, la demande est toujours aller de l'avant, d'accord.Access-Control-Allow-Methods
en-tête est omis, Firefox ne pas.Chrome permettant
PATCH
etc serait un bug, vous avez un exemple/ avez-vous signalé? Je n'arrive pas à le reproduire ici.Dans google Chrome, ici, je reçois par exemple
var xhr = new XMLHttpRequest(); xhr.open("GET", "https://mapit.mysociety.org/area/2514", true); xhr.send();
- fonctionne très bien (site renvoie pas de A-C-A-M en-tête). Maisvar xhr = new XMLHttpRequest(); xhr.open("PATCH", "https://mapit.mysociety.org/area/2514", true); xhr.send();
donne une erreur:Method PATCH is not allowed by Access-Control-Allow-Methods in preflight response.
Ah en fait j'ai été l'envoi de
Access-Control-Allow-Methods: *
comme un en-tête qui est accepté dans Chrome mais pas sous Firefox. L'astérisque ne semble pas être permis par la spécification.Il est autorisé par les spécifications, mais pas mis en œuvre dans tous les navigateurs encore. Voir à la fin de developer.mozilla.org/en-US/docs/Web/HTTP/Headers/... pour le bug question des liens (a été ajouté à Chrome en 63).
OriginalL'auteur M Somerville