Aller au contenu principal

📄 CORS

1. Quelle est la différence entre JSONP et CORS ?

JSONP (JSON with Padding) et CORS (Cross-Origin Resource Sharing) sont deux techniques permettant d'effectuer des requêtes cross-origin, autorisant les pages web à demander des données depuis des noms de domaine (sites web) différents.

JSONP

JSONP est une technique plus ancienne, utilisée pour contourner les restrictions de la politique de même origine (Same-Origin Policy), permettant aux pages web de demander des données depuis des origines différentes (domaine, protocole ou port). Comme le chargement des balises <script> n'est pas soumis à la politique de même origine, JSONP fonctionne en ajoutant dynamiquement une balise <script> pointant vers une URL qui renvoie des données JSON. La réponse de cette URL est encapsulée dans un appel de fonction, et le JavaScript de la page définit cette fonction à l'avance pour recevoir les données.

// client-side
function receiveData(jsonData) {
console.log(jsonData);
}

let script = document.createElement('script');
script.src = 'http://example.com/data?callback=receiveData';
document.body.appendChild(script);
// server-side
receiveData({ name: 'PittWu', type: 'player' });

L'inconvénient est un risque de sécurité élevé (car du JavaScript arbitraire peut être exécuté) et la prise en charge limitée aux requêtes GET uniquement.

CORS

CORS est une technique plus sécurisée et plus moderne que JSONP. Elle utilise l'en-tête HTTP Access-Control-Allow-Origin pour indiquer au navigateur que la requête est autorisée. Le serveur configure les en-têtes CORS appropriés pour déterminer quelles origines peuvent accéder à ses ressources.

Si le front-end de http://client.com souhaite accéder aux ressources de http://api.example.com, api.example.com doit inclure l'en-tête HTTP suivant dans sa réponse :

Access-Control-Allow-Origin: http://client.com

Ou, si toute origine est autorisée :

Access-Control-Allow-Origin: *

CORS peut être utilisé pour tout type de requête HTTP et constitue un moyen standardisé et sécurisé pour effectuer des requêtes cross-origin.