HTTP
Origine croisée et contrôle d'accès
Recherche…
Remarques
Le partage de ressources entre origines est conçu pour autoriser les requêtes dynamiques entre domaines, en utilisant souvent des techniques telles que AJAX . Pendant que le script effectue la majeure partie du travail, le serveur HTTP doit prendre en charge la requête en utilisant les en-têtes appropriés.
Client: envoi d'une requête de partage de ressources d'origine croisée (CORS)
Une demande d' origine croisée doit être envoyée, y compris l'en-tête d' Origin
. Cela indique d'où provient la demande. Par exemple, une requête d'origine croisée de http://example.com
à http://example.org
ressemblerait à ceci:
GET /cors HTTP/1.1
Host: example.org
Origin: example.com
Le serveur utilisera cette valeur pour déterminer si la demande est autorisée.
Serveur: répondre à une requête CORS
La réponse à une demande CORS doit inclure un en Access-Control-Allow-Origin
tête Access-Control-Allow-Origin
, qui détermine les origines autorisées à utiliser la ressource CORS. Cet en-tête peut prendre l'une des trois valeurs suivantes:
- Une origine Cela permet uniquement les demandes de cette origine .
- Le personnage
*
. Cela permet des demandes de toute origine . - La chaîne
null
. Cela ne permet aucune demande CORS .
Par exemple, à la réception d'une demande CORS provenant de l'origine http://example.com
, si example.com
est une origine autorisée, le serveur renvoie cette réponse:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.com
Une réponse d'origine quelconque permettrait également cette requête, à savoir:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Autoriser les informations d'identification ou la session de l'utilisateur
Autoriser l'envoi d'informations d'identification utilisateur ou la session de l'utilisateur avec une requête CORS permet au serveur de conserver les données utilisateur sur les requêtes CORS. Cela est utile si le serveur doit vérifier si l'utilisateur est connecté avant de fournir des données (par exemple, si vous effectuez une action uniquement si un utilisateur est connecté, cela nécessitera l'envoi de la requête CORS avec les informations d'identification).
Cela peut être réalisé côté serveur pour les requêtes en amont, en envoyant l'en Access-Control-Allow-Credentials
tête Access-Control-Allow-Credentials
en réponse à la demande de contrôle en amont OPTIONS
. Prenez le cas suivant d'une requête CORS pour DELETE
une ressource:
OPTIONS /cors HTTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: DELETE
HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.org
Access-Control-Allow-Methods: DELETE
Access-Control-Allow-Credentials: true
La ligne Access-Control-Allow-Credentials: true
indique que la demande DELETE
CORS suivante peut être envoyée avec les informations d'identification de l'utilisateur.
Demandes de contrôle en amont
Une requête CORS de base est autorisée à utiliser l'une des deux méthodes suivantes:
- OBTENIR
- POSTER
et seulement quelques en-têtes de sélection. Les requêtes POST CORS peuvent en outre choisir parmi seulement trois types de contenu.
Pour éviter ce problème, les demandes qui souhaitent utiliser d'autres méthodes, en-têtes ou types de contenu doivent d'abord émettre une demande de contrôle en amont , qui est une demande OPTIONS
incluant des en-têtes de demande de contrôle d'accès. Par exemple, il s'agit d'une demande de contrôle en amont qui vérifie si le serveur acceptera une demande PUT
incluant un en-tête DNT
:
OPTIONS /cors HTTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: DNT
Serveur: répondre aux demandes de contrôle en amont
Lorsqu'un serveur reçoit une demande de contrôle en amont, il doit vérifier s'il prend en charge la méthode et les en-têtes requis et renvoyer une réponse indiquant sa capacité à prendre en charge la demande, ainsi que toute autre donnée autorisée (telle que les informations d'identification).
Celles-ci sont indiquées dans les en-têtes Autoriser le contrôle d'accès. Le serveur peut également renvoyer un en-tête Max-Age
contrôle d'accès, indiquant la durée pendant laquelle la réponse en amont peut être mise en cache.
Voici à quoi peut ressembler un cycle demande-réponse pour une demande de contrôle en amont:
OPTIONS /cors HHTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: DNT
HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.org
Access-Control-Allow-Methods: PUT
Access-Control-Allow-Headers: DNT