Após adicionar seu service ao Alibaba Cloud CDN, você pode ativar o acesso entre origens configurando cabeçalhos de resposta HTTP nos POPs.
O que é o Cross-Origin Resource Sharing?
O Cross-Origin Resource Sharing (CORS) é um mecanismo padrão que permite a uma página da web acessar recursos de uma origem diferente (domínio, protocolo ou porta) da sua própria. Ele oferece uma maneira segura de ativar transferências de dados entre origens. Para mais informações, consulte Cross-Origin Resource Sharing (CORS).
Por padrão, o CDN não ativa o Cross-Origin Resource Sharing (CORS). Sem essa configuração, os navegadores aplicam a política de mesma origem e bloqueiam solicitações entre origens, o que impede que outros sites carreguem seus recursos.
Benefícios do CORS
Devido a restrições de segurança, os navegadores geralmente seguem a política de mesma origem, que restringe as solicitações de carregar e acessar recursos de domínios, subdomínios, protocolos ou portas diferentes. Por exemplo, example.com não pode acessar recursos em example.org. Ao configurar o Cross-Origin Resource Sharing (CORS), você pode definir os cabeçalhos de resposta relevantes no servidor CDNDCDN. Se uma solicitação incluir cabeçalhos que atendam às regras permitidas, o servidor retornará os cabeçalhos de resposta HTTP correspondentes, permitindo que os recursos de origens diferentes sejam carregados e acessados.
Como funciona
CORS configurado no servidor de origem
O cliente envia uma solicitação para example.com, por exemplo,
https://example.com/index.html.O
example.comresponde com o arquivoindex.html. A página contém um link para um recurso em uma origem diferente:https://example.org/image_01.png.O cliente envia uma solicitação para
example.org.Após receber a solicitação, o
example.orgresponde com um cabeçalho CORS, por exemplo,Access-Control-Allow-Origin: *.Após receber a resposta, o navegador verifica o valor do cabeçalho de resposta CORS. Como o valor é
*, o que permite o acesso de qualquer origem, o navegador renderiza a resposta.
Com o CORS configurado no CDN
O cliente envia uma solicitação ao CDN, por exemplo,
https://example.com/index.html.O CDN responde com o arquivo index.html, que contém um recurso de outra origem:
https://example.org/image_01.png.O cliente envia uma solicitação ao CDN:
https://example.org/image_01.png. A solicitação inclui o cabeçalhoOrigin: http://example.com.Após receber a solicitação, o CDN verifica se o valor do cabeçalho Origin corresponde ao valor de Access-Control-Allow-Origin configurado no CDN. Há suporte para correspondência exata (um único valor ou vários valores) e correspondência de domínio com curinga. Se os valores não coincidirem, o CDN não retornará um cabeçalho CORS; o cabeçalho será retornado apenas quando houver correspondência.
O CDN retorna o cabeçalho CORS com base no resultado da validação, por exemplo,
Access-Control-Allow-Origin: http://example.com.Após receber a resposta, o navegador verifica o valor do cabeçalho de resposta CORS. Como o valor é
http://example.com, o que permite o acesso entre origens, o navegador renderiza a resposta.
Observações de uso
Se você usar um bucket do OSS como servidor de origem, a configuração de CORS no console CDNDCDN substituirá a configuração de CORS no console do OSS. Para mais informações sobre como configurar o CORS no console do OSS, consulte Defina regras de CORS.
Se você usar um servidor local ou uma instância do ECS como servidor de origem, recomendamos separar o conteúdo estático e dinâmico e usar o CDNDCDN para acelerar a entrega de arquivos estáticos. O recurso de CORS configurado no console CDNDCDN se aplica apenas a arquivos estáticos.
Ativar o Cross-Origin Resource Sharing
Faça login no CDN console.
No painel de navegação à esquerda, clique em Domain Names.
Na página Domains, localize o domínio que deseja gerenciar e clique em Actions na coluna Manage.
-
Clique em Cache, selecione a guia Modify Outgoing Response Header e defina as origens e os métodos permitidos para solicitações entre origens.
-
Definir a origem para solicitações entre origens
Clique em Customize, configure os parâmetros conforme descrito na tabela a seguir e clique em OK.
Parâmetro
Descrição
Exemplo
Operation
Defina este parâmetro como Add para ativar o recurso de validação de CORS.
Add
Response Header
Você deve definir
Access-Control-Allow-Originpara usar o recurso de validação de origem cruzada.Access-Control-Allow-Origin
Header Value
Se a validação de CORS estiver desativada: Especifique apenas um curinga ou uma única origem.
-
Curinga
*: Permite que qualquer origem acesse o recurso. -
Origem única: Permite que os recursos sejam acessados apenas de uma origem específica (nome de domínio).
Se a validação de CORS estiver ativada: Especifique um curinga, uma única origem, várias origens ou um domínio com curinga.
-
Curinga
*: Permite que qualquer origem acesse o recurso. -
Origem única: Permite que os recursos sejam acessados apenas de uma origem específica (nome de domínio).
-
Várias origens especificadas: Configure várias origens específicas (nomes de domínio), separadas por vírgula
,, para permitir que essas origens acessem o recurso.ImportanteAo especificar várias origens, separe-as com vírgulas (
,). Se você usar ponto e vírgula (;), a configuração de CORS não terá efeito. O console ainda mostrará a configuração como bem-sucedida, mas o CDN tratará toda a string separada por ponto e vírgula como uma única origem. Essa origem não corresponde a nenhum domínio individual na solicitação, portanto, o CORS não funcionará. -
Domínio com curinga: Especifique um domínio com curinga para permitir o acesso de todas as origens que correspondam ao padrão.
-
* -
http://www.aliyun.com -
https://aliyun.com,http://www.aliyun.com -
http://*.aliyun.com
Allow Duplicates
-
Yes: Os cabeçalhos do servidor de origem são preservados e o novo cabeçalho com nome idêntico também é adicionado à resposta.
-
No: O novo cabeçalho substitui qualquer cabeçalho com nome idêntico do servidor de origem.
ImportanteAs configurações Allow Duplicates e CORS Validation são mutuamente exclusivas. Se você definir Allow Duplicates como Yes, a validação de CORS será desativada.
No
CORS
-
O CORS só pode ser configurado quando a Operation estiver definida como Add e o Response Header estiver definido como "Access-Control-Allow-Origin".
-
O CORS pode ser definido como Disable ou Enable. O valor padrão é Disable.
-
Disable: Os POPs do CDN não validam o cabeçalho
Originnas solicitações recebidas e sempre retornam o valor configurado deAccess-Control-Allow-Origin. -
Enable: Os POPs do CDN validam solicitações entre origens com base nas seguintes regras e respondem com o valor de
Access-Control-Allow-Originde acordo.-
Response Header: Se o Response Header estiver definido como
, o POP sempre retornaráAccess-Control-Allow-Origin:, independentemente de a solicitação do usuário conter um cabeçalhoOriginou qual seja o seu valor. -
Response Header: O Response Header está definido como uma ou mais origens específicas, separadas por vírgulas (
,).-
Se o valor do cabeçalho
Originna solicitação do usuário corresponder exatamente a uma das origens configuradas, o POP responderá com essa origem como o valor do cabeçalhoAccess-Control-Allow-Origin. -
Se nenhuma correspondência for encontrada, o POP não adicionará o cabeçalho CORS à resposta.
-
-
Response Header: Se o Response Header estiver definido como um domínio com curinga, o POP verificará se o cabeçalho
Originna solicitação corresponde ao padrão de curinga.
-
-
Se você definir Enable como Header Value e o nome de domínio no campo Header Value contiver um hífen (
-), será necessário escapá-lo substituindo-por%-. Exemplo:-
Valor original do cabeçalho:
http://doc.aliyun-example.com. -
Valor escapado do cabeçalho:
http://doc.aliyun%-example.com.
-
-
Enable
-
-
Definir os métodos para solicitações entre origens
Clique em Customize, configure os parâmetros conforme descrito na tabela a seguir e clique em OK.
Parâmetro
Descrição
Exemplo
Operation
Defina este parâmetro como Add.
Add
Response Header
Deve ser definido como
Access-Control-Allow-MethodsAccess-Control-Allow-Methods
Header Value
Há suporte para os métodos de solicitação
GET, POST e PUT. Se você precisar adicionarGET, POST e PUTao mesmo tempo, separe-os com uma vírgula,.GETAllow Duplicates
-
Yes: Os cabeçalhos do servidor de origem são preservados e o novo cabeçalho com nome idêntico também é adicionado à resposta.
-
No: O novo cabeçalho substitui qualquer cabeçalho com nome idêntico do servidor de origem.
No
-
-
Exemplos de configuração
Exemplo 1
Se o valor do cabeçalho de resposta para o CORS estiver definido como uma ou mais origens específicas separadas por vírgulas (,):
Se o valor do cabeçalho
Originna solicitação do usuário corresponder exatamente a uma das origens especificadas, o POP do CDNDCDN responderá com o cabeçalho CORS correspondente.Se nenhuma correspondência exata for encontrada, o cabeçalho CORS não será incluído na resposta.
No CDN/DCDN, defina: Access-Control-Allow-Origin: http://example.com,https://aliyundoc.com.
O cabeçalho
Originda solicitação do usuário éhttp://example.com, e o Point of Presence (POP) do CDNDCDN responde comAccess-Control-Allow-Origin: http://example.com.O cabeçalho
Originna solicitação do usuário éhttps://aliyundoc.com, e o nó do CDNDCDN responde comAccess-Control-Allow-Origin: https://aliyundoc.com.O nó do CDNDCDN não responderá a uma solicitação do usuário com o cabeçalho Origin
http://aliyundoc.com(devido a uma incompatibilidade de protocolo: a solicitação do usuário usa HTTP, enquanto o CDNDCDN está configurado para HTTPS).Se o cabeçalho
Originde uma solicitação forhttp://aliyun.com, o POP do CDNDCDN não responderá (incompatibilidade de domínio).
Exemplo 2
Se o valor do cabeçalho de resposta para o CORS estiver definido como um domínio com curinga, o POP verificará se o valor de Origin no cabeçalho da solicitação corresponde ao padrão de curinga.
No CDN/DCDN, defina: Access-Control-Allow-Origin: http://*.aliyundoc.com.
A solicitação do usuário contém o cabeçalho Origin
http://demo.aliyundoc.com, e o POP do CDNDCDN responde comAccess-Control-Allow-Origin: http://demo.aliyundoc.com.Se o cabeçalho Origin de uma solicitação for
http://demo.example.com, o POP do CDNDCDN não responderá porque o nome de domínio não corresponde.O nó do CDNDCDN não responde a uma solicitação do usuário com o cabeçalho Origin
https://demo.aliyundoc.comporque a solicitação usa o protocolo HTTPS, mas o CDNDCDN está configurado com o protocolo HTTP.
Verifique se a configuração entre origens está em vigor
O novo cabeçalho de resposta entre origens não se aplica automaticamente aos recursos armazenados em cache anteriormente, porque o CDN armazena em cache a resposta HTTP completa. Para aplicar a nova configuração de Access-Control-Allow-Origin, remova os recursos correspondentes do cache do CDN. Caso contrário, os usuários continuarão recebendo respostas do cache antigo que não incluem o cabeçalho.
Use o curl para enviar uma solicitação GET com um cabeçalho Origin especificado e verifique o cabeçalho de resposta na saída detalhada:
curl -svo /dev/null https://accelerated.domain.name/resource/path -H 'origin:https://your-site.example.com'Verifique o cabeçalho
Access-Control-Allow-Originna resposta. Se o valor do cabeçalho for*ou corresponder à Origin da solicitação, a configuração estará em vigor.
Observações de uso e limites
Limites de configuração de domínio com curinga
Após ativar a validação de CORS, você pode configurar apenas um único domínio com curinga ou vários domínios exatos (sem curinga) separados por vírgulas. Não é possível separar diretamente vários domínios com curinga usando vírgulas (como https://*.example.com,https://*.example.org).
Diferenças entre arquivos de fonte e arquivos de vídeo
Os arquivos de fonte (como .ttf e .woff) estão sempre sujeitos à validação obrigatória do cabeçalho de resposta CORS pelo navegador, independentemente de como são carregados. Os arquivos de vídeo (como MP4 e WebM) carregados por meio da tag de vídeo não estão sujeitos a restrições de CORS por padrão, a menos que o atributo crossorigin seja adicionado explicitamente. Portanto, mesmo que vídeos e fontes estejam hospedados no mesmo domínio, o acesso aos vídeos geralmente não aciona erros de CORS, mas o acesso aos arquivos de fonte sim. Isso é determinado pelas especificações do navegador.
Configuração de CORS quando o CDN acelera o OSS
Se você quiser repassar a configuração de CORS do bucket do OSS de origem, certifique-se de que a primeira solicitação contenha um cabeçalho Origin. Dessa forma, o CDN pode buscar na origem e armazenar em cache o cabeçalho de resposta Access-Control-Allow-Origin retornado pelo OSS. No entanto, o mecanismo de cache pode causar problemas entre origens para solicitações subsequentes que não contenham um cabeçalho Origin ou que contenham uma Origin diferente.
Prática recomendada: Adicione cabeçalhos de resposta relacionados ao CORS usando o recurso Configure um cabeçalho de resposta de saída em Cache Settings no console do CDN, em vez de confiar no repasse.
Quando vários domínios do CDN estão associados ao mesmo bucket do OSS, não há suporte para configurar a regra de CORS apenas uma vez no OSS e deixar que o CDN a herde automaticamente. Como os POPs do CDN armazenam em cache os cabeçalhos de resposta e o comportamento de cache é afetado pelo fato de a primeira solicitação conter ou não um cabeçalho Origin, você deve configurar as regras de CORS separadamente para cada domínio do CDN no console do CDN.
Para saber como solucionar problemas em casos nos quais os erros de CORS persistem após configurar o Access-Control-Allow-Origin, consulte Cache troubleshooting.