Après avoir ajouté votre domaine à Alibaba Cloud CDNDCDN, configurez des en-têtes de réponse HTTP personnalisés pour activer le partage de ressources cross-origin (CORS) et accéder à des ressources provenant d'origines différentes.
Qu'est-ce que CORS ?
Le partage de ressources cross-origin (CORS) est une solution standard HTML5 permettant aux pages web d'accéder et de charger des ressources depuis différents serveurs d'origine, tout en garantissant la sécurité des transmissions de données. Pour plus d'informations, consultez Partage de ressources cross-origin (CORS).
Avantages
Pour des raisons de sécurité, les navigateurs appliquent la politique de même origine. Celle-ci empêche les pages web d'initier des requêtes pour accéder et charger des ressources situées sur des domaines ou sous-domaines différents, ou utilisant des protocoles ou ports distincts. Par exemple, example.com ne peut pas accéder aux ressources hébergées sur example.org. La configuration CORS permet de définir des en-têtes de réponse sur le serveur CDN DCDN. Si une requête d'accès aux ressources CDN DCDN contient des en-têtes conformes aux règles autorisées, le chargement et l'accès aux ressources cross-origin sont alors possibles.
Fonctionnement de CORS
CORS désactivé
Un client envoie une requête pour
http://example.com/index.htmlàexample.com.example.comrenvoie le fichierindex.htmlau client. L'URL du fichier contient l'URL d'une ressource provenant d'un autre serveur d'origine :http://example.org/image_01.png.Le client envoie une requête pour
http://example.org/image_01.pngàexample.org.example.orgretourne un en-tête cross-origin, tel queAccess-Control-Allow-Origin: *.Le client reçoit la réponse et le navigateur vérifie la valeur de l'en-tête. Cette valeur étant un astérisque (*), elle indique que les requêtes cross-origin sont autorisées depuis toutes les origines. Le navigateur affiche ensuite la réponse.
CORS activé
Un client envoie une requête pour
http://example.com/index.htmlà CDN DCDN.CDN DCDN renvoie le fichier
index.htmlau client. L'URL du fichier contient l'URL d'une ressource provenant d'un autre serveur d'origine :http://example.org/image_01.png.Le client envoie une requête pour
http://example.org/image_01.pngà CDN DCDN. La requête inclut l'en-têteOrigin:http://example.com.CDN DCDN reçoit la requête et compare la valeur de l'en-tête
Originavec la valeur configurée pourAccess-Control-Allow-Origin. Vous pouvez spécifier une ou plusieurs valeurs, ou un nom de domaine générique pourAccess-Control-Allow-Origin. L'en-têteAccess-Control-Allow-Originn'est retourné au client que si les valeurs d'en-tête correspondent.CDN DCDN retourne un en-tête cross-origin, tel que
Access-Control-Allow-Origin:http://example.com, au client.Le client reçoit la réponse et le navigateur vérifie la valeur de l'en-tête. Cette valeur étant
http://example.com, elle indique que les requêtes cross-origin depuishttp://example.comsont autorisées. Le navigateur affiche ensuite la réponse.
Remarques d'utilisation
Si le serveur d'origine est un bucket Object Storage Service (OSS) et que CORS est configuré à la fois dans les consoles OSS et CDNDCDN, les paramètres CORS de la console CDNDCDN s'appliquent. Pour plus d'informations sur les paramètres CORS dans la console OSS, consultez CORS.
Les en-têtes de réponse HTTP configurés dans la console DCDN, comme l'en-tête CORS
Access-Control-Allow-Origin, s'appliquent à tous les types de ressources, y compris les requêtes API dynamiques.
Activer CORS
Connectez-vous à la console DCDN.
Dans le volet de navigation de gauche, cliquez sur Domain Names.
Sur la page Domain Names, recherchez le nom de domaine cible et cliquez sur Configure.
Dans l'arborescence de navigation de gauche du nom de domaine, cliquez sur Caching.
Cliquez sur l'onglet Modify Outgoing Response Header, puis sur Add pour configurer l'en-tête de réponse HTTP que les nœuds DCDN ajoutent aux réponses.
-
Définissez les paramètres suivants pour spécifier les origines autorisées pour les requêtes cross-origin, puis cliquez sur OK.

Paramètre
Description
Exemple
Operation
Définissez ce paramètre sur Add pour utiliser la fonctionnalité CORS.
Add
Response Header
Définissez ce paramètre sur
Access-Control-Allow-Originpour utiliser la fonctionnalité CORS.Access-Control-Allow-Origin
Header Value
CORS désactivé : Vous pouvez uniquement configurer un caractère générique ou une seule origine spécifiée.
Caractère générique (
*) : Un caractère générique est configuré, indiquant que les ressources sont accessibles depuis toutes les origines.Origine unique spécifiée : Une seule origine (nom de domaine) est spécifiée, indiquant que les ressources ne sont accessibles que depuis cette origine précise.
CORS activé : Vous pouvez configurer un caractère générique, une seule origine spécifiée, plusieurs origines spécifiées et des noms de domaine génériques.
Caractère générique (
*) : Un caractère générique est configuré, indiquant que les ressources sont accessibles depuis toutes les origines.Origine unique spécifiée : Une seule origine (nom de domaine) est spécifiée, indiquant que les ressources ne sont accessibles que depuis cette origine précise.
Plusieurs origines spécifiées : Plusieurs origines (noms de domaine) sont spécifiées et séparées par des virgules (
,), indiquant que les ressources sont accessibles depuis les origines comprises dans la plage spécifiée.Noms de domaine génériques : Un nom de domaine générique est configuré, indiquant que les ressources sont accessibles depuis toutes les origines correspondant au nom de domaine générique spécifié.
*http://www.aliyun.comhttps://aliyun.com,http://www.aliyun.comhttp://*.aliyun.com
Allow Duplicates
Yes : Les en-têtes en double sont autorisés. L'en-tête retourné par le serveur d'origine et celui ajouté à la réponse sont tous deux renvoyés au client.
No : Les en-têtes en double ne sont pas autorisés. L'en-tête retourné par le serveur d'origine est écrasé par celui ajouté à la réponse.
ImportantLes paramètres Allow Duplicates et CORS sont mutuellement exclusifs. Si vous définissez Allow Duplicates sur Yes, le paramètre CORS devient inopérant.
No
CORS
Le paramètre CORS n'est configurable que si vous avez défini Operation sur Add et Response Header sur
Access-Control-Allow-Origin.Valeurs valides pour CORS : Disable et Enable. Valeur par défaut : Disable.
Disable : Les POP DCDN ne vérifient pas l'en-tête
Origindans les requêtes utilisateur. Dans ce cas, les POP retournent la valeur configurée deAccess-Control-Allow-Origin.Enable : Les POP DCDN vérifient l'en-tête
Origindans les requêtes utilisateur et attribuent une valeur à l'en-têteAccess-Control-Allow-Originselon les règles suivantes :Correspondance par caractère générique : Si vous définissez l'en-tête
Access-Control-Allow-Originsur un astérisque (),Access-Control-Allow-Origin:est retourné, que les requêtes utilisateur contiennent ou non l'en-têteOrigin, et quelle que soit la valeur spécifiée pour cet en-têteOrigin.Correspondance exacte : Vous pouvez spécifier une ou plusieurs valeurs pour l'en-tête
Access-Control-Allow-Origin. Séparez les valeurs multiples par des virgules (,) :Si la valeur de l'en-tête
Origind'une requête utilisateur correspond à l'une des valeurs de l'en-têteAccess-Control-Allow-Origin, la valeur correspondante de l'en-têteAccess-Control-Allow-Originest retournée.Si la valeur de l'en-tête
Origind'une requête utilisateur ne correspond à aucune valeur de l'en-têteAccess-Control-Allow-Origin, l'en-têteAccess-Control-Allow-Originn'est pas retourné.
Correspondance par nom de domaine générique : Si vous définissez l'en-tête
Access-Control-Allow-Originsur un nom de domaine générique, la valeur de l'en-têteOriginest comparée au nom de domaine générique.
Si vous définissez le paramètre CORS sur Enable et que la valeur souhaitée pour le paramètre Header Value contient un tiret (
-), vous devez échapper ce tiret (-) en%-. Exemples :Valeur d'en-tête de réponse d'origine :
http://doc.aliyun-example.com.Valeur d'en-tête de réponse échappée :
http://doc.aliyun%-example.com.
Enable
-
Configurez les paramètres suivants pour spécifier les méthodes autorisées pour les requêtes cross-origin, puis cliquez sur OK.

Paramètre
Description
Exemple
Operation
Définissez ce paramètre sur Add.
Add
Response Header
Définissez ce paramètre sur
Access-Control-Allow-Methods.Access-Control-Allow-Methods
Header Value
Valeurs valides :
GET,POSTetPUT. Si vous ajoutezGET,POSTetPUTsimultanément, séparez-les par des virgules (,).GETAllow Duplicates
Yes : Les en-têtes en double sont autorisés. L'en-tête retourné par le serveur d'origine et celui ajouté à la réponse sont tous deux renvoyés au client.
No : Les en-têtes en double ne sont pas autorisés. L'en-tête retourné par le serveur d'origine est écrasé par celui ajouté à la réponse.
No
Exemples de configuration
Exemple 1
Si la valeur de l'en-tête de réponse pour CORS est définie sur une ou plusieurs origines spécifiques séparées par des virgules (,) :
Si la valeur de l'en-tête
Origindans la requête utilisateur correspond exactement à l'une des origines spécifiées, le POP CDNDCDN répond avec l'en-tête CORS correspondant.En l'absence de correspondance exacte, l'en-tête CORS n'est pas inclus dans la réponse.
Sur CDN/DCDN, définissez : Access-Control-Allow-Origin: http://example.com,https://aliyundoc.com.
L'en-tête
Originde la requête utilisateur esthttp://example.com, et le Point of Presence (POP) CDNDCDN répond avecAccess-Control-Allow-Origin: http://example.com.L'en-tête
Originde la requête utilisateur esthttps://aliyundoc.com, et le nœud CDNDCDN répond avecAccess-Control-Allow-Origin: https://aliyundoc.com.Le nœud CDNDCDN ne répond pas à une requête utilisateur dont l'en-tête Origin est
http://aliyundoc.com(en raison d'une incompatibilité de protocole : la requête utilisateur utilise HTTP, tandis que CDNDCDN est configuré pour HTTPS).Si l'en-tête
Origind'une requête esthttp://aliyun.com, le POP CDNDCDN ne répond pas (incompatibilité de domaine).
Exemple 2
Si la valeur de l'en-tête de réponse pour CORS est définie sur un domaine générique, le POP vérifie si la valeur Origin dans l'en-tête de requête correspond au modèle générique.
Sur CDN/DCDN, définissez : Access-Control-Allow-Origin: http://*.aliyundoc.com.
La requête utilisateur contient l'en-tête Origin
http://demo.aliyundoc.com, et le POP CDNDCDN répond avecAccess-Control-Allow-Origin: http://demo.aliyundoc.com.Si l'en-tête Origin d'une requête est
http://demo.example.com, le POP CDNDCDN ne répond pas car le nom de domaine ne correspond pas.Le nœud CDNDCDN ne répond pas à une requête utilisateur dont l'en-tête Origin est
https://demo.aliyundoc.comcar la requête utilise le protocole HTTPS, alors que CDNDCDN est configuré avec le protocole HTTP.
Q : Comment utiliser curl pour vérifier que l'en-tête Access-Control-Allow-Origin du CDN fonctionne correctement ?
Envoyez une requête GET avec un en-tête Origin en utilisant curl -svo /dev/null et examinez la sortie détaillée pour trouver les en-têtes de réponse. Si l'en-tête Access-Control-Allow-Origin apparaît dans la réponse avec la valeur attendue (par exemple, * ou votre domaine spécifié), votre configuration CORS fonctionne. Si l'en-tête est absent, vérifiez vos règles d'en-tête de réponse personnalisées dans la console CDN ainsi que les paramètres CORS de votre serveur d'origine.
curl -svo /dev/null https://img.anleme.cc/agent/dl1.jpg -H 'origin:https://am.anleme.cc'