CORS (Cross-Origin Resource Sharing) est une fonctionnalité de sécurité mise en œuvre par les navigateurs Web pour contrôler la manière dont les ressources peuvent être demandées à partir d'un domaine (origine) différent de celui d'où provient la ressource. Il est crucial dans le développement Web moderne, en particulier lorsque vous travaillez avec des API, car il empêche tout accès non autorisé aux ressources et garantit un échange sécurisé de données.
Une origine est définie par la combinaison de :
Exemple :
La politique de même origine est une mesure de sécurité qui restreint la manière dont les ressources d'une page Web peuvent interagir avec des ressources d'une autre origine.
Bien que SOP garantisse la sécurité, il limite les requêtes légitimes d'origine croisée, c'est là que CORS entre en jeu.
CORS est un mécanisme qui permet aux serveurs de spécifier qui peut accéder à leurs ressources en incluant des en-têtes HTTP spécifiques dans leurs réponses. Ces en-têtes indiquent si le navigateur doit autoriser le client à accéder aux ressources demandées.
Lorsqu'un navigateur effectue une requête d'origine croisée, il vérifie les en-têtes de réponse du serveur pour déterminer si la requête est autorisée.
Étapes clés :
Demande de contrôle en amont (facultatif) :
Pour certains types de requêtes, le navigateur envoie une requête OPTIONS initiale pour vérifier si la requête réelle est autorisée.
Réponse du serveur :
Le serveur inclut les en-têtes CORS appropriés dans la réponse.
Décision du navigateur :
Si les en-têtes correspondent aux attentes du navigateur, la ressource est partagée ; sinon, le navigateur bloque la demande.
Access-Control-Allow-Origin : Spécifie quelles origines sont autorisées à accéder à la ressource.
Exemple : Access-Control-Allow-Origin : https://example.com
Access-Control-Allow-Methods : Spécifie les méthodes HTTP autorisées.
Exemple : Méthodes d'autorisation de contrôle d'accès : GET, POST, PUT
Access-Control-Allow-Headers : Spécifie les en-têtes personnalisés qui peuvent être envoyés dans les requêtes.
Exemple : Access-Control-Allow-Headers : Content-Type, Authorization
Access-Control-Allow-Credentials : Indique si les informations d'identification (cookies, authentification HTTP) peuvent être envoyées.
Exemple : Access-Control-Allow-Credentials : true
Demandes simples :
Demandes vérifiées en amont :
Demandes accréditées :
fetch("https://api.otherdomain.com/data", { method: "GET", headers: { "Content-Type": "application/json", }, credentials: "include", // For sending cookies or credentials }) .then(response => response.json()) .then(data => console.log("Data:", data)) .catch(error => console.error("Error:", error));
Access-Control-Allow-Origin: https://example.com Access-Control-Allow-Methods: GET, POST Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Allow-Credentials: true
const express = require("express"); const cors = require("cors"); const app = express(); // Use the CORS middleware app.use(cors({ origin: "https://example.com", // Allow only this origin methods: ["GET", "POST"], // Allow these HTTP methods credentials: true, // Allow credentials })); app.get("/data", (req, res) => { res.json({ message: "CORS request successful" }); }); app.listen(3000, () => console.log("Server running on port 3000"));
Erreur : aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée.
Erreur : les demandes d'accréditation nécessitent que « Access-Control-Allow-Credentials » soit vrai.
La demande de contrôle en amont échoue :
CORS est une fonctionnalité essentielle pour le partage de ressources multi-origines sécurisé et fonctionnel dans les applications Web. En comprenant et en configurant correctement les en-têtes CORS sur votre serveur, vous pouvez garantir une communication fluide et sécurisée entre les domaines tout en respectant les normes de sécurité Web.
Bonjour, je m'appelle Abhay Singh Kathayat !
Je suis un développeur full-stack avec une expertise dans les technologies front-end et back-end. Je travaille avec une variété de langages et de frameworks de programmation pour créer des applications efficaces, évolutives et conviviales.
N'hésitez pas à me contacter à mon e-mail professionnel : kaashshorts28@gmail.com.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!