Todos os produtos
Search
Central de documentação

Object Storage Service:CORS

Última atualização: Oct 31, 2026

O erro "blocked by CORS policy" ocorre quando um site carrega recursos do OSS porque a política de mesma origem do navegador permite acesso apenas a recursos com o mesmo protocolo, domínio e porta. Configure as regras de Cross-Origin Resource Sharing (CORS) do OSS para autorizar, com segurança, sites específicos a acessar seus recursos.

Como funciona

A política de mesma origem do navegador permite que uma página acesse apenas recursos com o mesmo protocolo, domínio e porta. Qualquer diferença entre eles torna a requisição cross-origin:

Página atual

Recurso solicitado

Cross-origin

Motivo

https://www.example.com

https://www.example.com/api

Não

Mesma origem

https://www.example.com

http://www.example.com/api

Sim

Protocolo diferente

https://www.example.com

https://api.example.com/data

Sim

Domínio diferente

https://www.example.com

https://www.example.com:8080/api

Sim

Porta diferente

Quando uma página da web solicita recursos do OSS, o domínio do OSS difere do domínio da página. O navegador verifica se o OSS permite explicitamente o acesso cross-origin. Se o OSS não tiver uma regra CORS correspondente, o navegador rejeita a requisição e retorna um erro.

Configure as regras CORS do OSS para informar ao navegador quais requisições cross-origin são permitidas. Se uma regra corresponder, o OSS retorna cabeçalhos como Access-Control-Allow-Origin na resposta. O navegador permite que a página da web acesse o recurso somente após receber esses cabeçalhos.

Método de configuração

  1. Acesse a Bucket list e clique no bucket de destino.

  2. No painel de navegação à esquerda, escolha Content Security > CORS, clique em Create Rule e configure os parâmetros da regra CORS conforme necessário.

    • Origin: Especifique os sites que podem acessar recursos cross-origin, como https://www.example.com.

    • Allowed Methods: Especifique os métodos HTTP permitidos, como GET, PUT e POST.

    • Allowed Headers: Especifique os cabeçalhos de requisição permitidos, como Authorization e x-oss-*.

    • Exposed Headers: Especifique os cabeçalhos de resposta que o JavaScript do frontend pode ler, como ETag.

    • Cache Timeout (Seconds): Especifique o tempo de cache dos resultados de preflight.

    • Vary: Origin: Ative esta opção para múltiplas origens ou caracteres curinga a fim de evitar poluição de cache.

  3. Clique em OK para concluir a configuração.

Para descrições detalhadas dos parâmetros, consulte Parameters of CORS rules. Para configurações específicas, confira os exemplos de cenário a seguir.

Exemplos de cenários

Os cenários a seguir mostram como configurar o CORS para diferentes requisitos de negócio.

Carregar recursos de site estático

O site em https://www.example.com precisa carregar imagens, CSS e arquivos JavaScript do OSS.

Parâmetro

Valor

Descrição

Origin

https://www.example.com

Permita requisições cross-origin apenas deste site.

Allowed Methods

GET, HEAD

O método GET baixa recursos, e o HEAD valida caches.

Allowed Headers

Deixe em branco

Esta é uma requisição simples e não aciona o preflight. Portanto, esta configuração não é usada.

Exposed Headers

ETag, Content-Length

O ETag valida caches, e o Content-Length exibe o progresso do carregamento.

Cache Timeout (Seconds)

86400

Armazene em cache os resultados de preflight por 24 horas para reduzir as requisições de preflight.

Vary: Origin

Desmarque

A origem é única e fixa; portanto, o cache de múltiplos domínios não é uma preocupação.

Fazer upload de arquivos diretamente do frontend

Os usuários fazem upload de avatares, documentos e outros arquivos para o OSS a partir da página da web em https://app.example.com.

Parâmetro

Valor

Descrição

Origin

https://app.example.com

Garanta que apenas este aplicativo autorizado possa fazer upload de arquivos.

Allowed Methods

PUT, POST

O uso de PUT ou POST é necessário para o upload de arquivos.

Allowed Headers

*

Assinaturas temporárias (STS ou URLs pré-assinadas) protegem os uploads diretos do frontend. Use * para oferecer suporte aos diversos cabeçalhos enviados pelos SDKs.

Exposed Headers

ETag, x-oss-request-id

O ETag verifica a integridade do arquivo enviado, e o x-oss-request-id ajuda a solucionar problemas.

Cache Timeout (Seconds)

600

As operações de upload são relativamente incomuns. O armazenamento em cache por 10 minutos reduz as requisições de preflight e permite que as alterações de configuração entrem em vigor rapidamente.

Vary: Origin

Selecione

Previna a poluição do cache do CDN e prepare o ambiente para uma possível implantação em múltiplos domínios.

Suporte para múltiplos ambientes

Múltiplos subdomínios para desenvolvimento, testes e produção, como dev.example.com e app.example.com, precisam acessar os mesmos recursos do OSS.

Parâmetro

Valor

Descrição

Origin

https://*.example.com

Use o caractere curinga * para autorizar todos os subdomínios HTTPS sob example.com de uma só vez.

Allowed Methods

GET, PUT, POST

Permita a leitura e o upload de recursos para atender aos requisitos de teste em múltiplos ambientes.

Allowed Headers

*

No desenvolvimento em múltiplos ambientes, cada ambiente pode introduzir cabeçalhos personalizados diferentes. Use * para evitar alterações frequentes nas regras CORS.

Exposed Headers

ETag, x-oss-request-id

O ETag valida caches e a integridade do upload, e o x-oss-request-id ajuda a solucionar problemas.

Cache Timeout (Seconds)

3600

A duração de cache de uma hora oferece flexibilidade ao alternar e depurar múltiplos ambientes.

Vary: Origin

Selecione

Esta opção é obrigatória. Ela instrui o CDN a distinguir o conteúdo armazenado em cache pelo cabeçalho Origin e evita conflitos de cache entre ambientes.

Fazer chamadas no estilo de API com autenticação

O aplicativo frontend em https://api.example.com precisa incluir cabeçalhos personalizados, como Authorization, para acessar recursos protegidos do OSS.

Parâmetro

Valor

Descrição

Origin

https://api.example.com

Para requisições com informações de autenticação, a origem deve ser um domínio preciso e confiável.

Allowed Methods

GET, PUT, DELETE

Ofereça suporte ao gerenciamento completo do ciclo de vida para leitura, atualização e exclusão de recursos privados.

Allowed Headers

authorization, content-type, x-oss-*

Não use *. Liste explicitamente cada cabeçalho de requisição necessário e siga o princípio do menor privilégio.

Exposed Headers

ETag, x-oss-request-id

O ETag valida caches e a integridade, e o x-oss-request-id ajuda a solucionar problemas.

Cache Timeout (Seconds)

600

Para requisições autenticadas, uma duração menor do cache de preflight ajuda as alterações na política de segurança a entrar em vigor mais rapidamente.

Vary: Origin

Selecione

Instrua o CDN a armazenar em cache, separadamente, as requisições com origens diferentes para evitar conflitos.

Tipos de requisições CORS

Os navegadores classificam as requisições cross-origin como requisições simples ou requisições de preflight com base em suas características. Os dois tipos exigem configurações CORS ligeiramente diferentes.

Tipo

Condições de acionamento

Configurações CORS necessárias

Requisição simples

Todas as seguintes condições são atendidas:

  • A requisição usa GET/HEAD/POST.

  • As requisições POST têm um Content-Type de text/plain, application/x-www-form-urlencoded ou multipart/form-data

  • A requisição não possui cabeçalhos personalizados.

Origem e métodos permitidos

Requisição de preflight

Qualquer uma das seguintes condições é atendida:

  • A requisição usa um método diferente de GET/HEAD/POST, como PUT/DELETE.

  • As requisições POST têm um Content-Type com outro valor.

  • A requisição possui cabeçalhos personalizados, como x-oss-*.

Origem, métodos permitidos e cabeçalhos permitidos

Requisições simples

As requisições simples podem ser enviadas diretamente e são processadas da seguinte forma:

  1. O navegador adiciona o cabeçalho Origin à requisição. O cabeçalho contém a origem do recurso, por exemplo, Origin: https://www.example.com.

  2. O OSS compara o método HTTP da requisição e o valor do cabeçalho Origin com a configuração CORS do bucket de destino. Se houver correspondência, o OSS inclui o cabeçalho Access-Control-Allow-Origin na resposta.

  3. O navegador recebe a resposta e verifica se o valor de Access-Control-Allow-Origin corresponde ao domínio da requisição original. Em caso de correspondência, a requisição é bem-sucedida; caso contrário, ela falha.

Requisições de preflight

Uma requisição de preflight primeiro verifica se o servidor permite a requisição e é processada da seguinte forma:

  1. O navegador envia uma requisição OPTIONS que inclui o método (Access-Control-Request-Method) e os cabeçalhos (Access-Control-Request-Headers) da requisição principal.

  2. O OSS usa a configuração CORS para verificar se o método e os cabeçalhos da requisição são permitidos. Se algum método ou valor de cabeçalho na requisição de preflight não estiver no conjunto de métodos e cabeçalhos permitidos do recurso de destino, a requisição falha e a requisição principal não é enviada.

  3. Após o sucesso do preflight, o navegador executa o mesmo processo de uma requisição simples.

Parâmetros das regras CORS

O OSS verifica as regras de cima para baixo, na ordem em que foram configuradas, e usa a primeira regra correspondente. Após encontrar uma correspondência, o OSS não verifica as regras subsequentes.

Parâmetro

Obrigatório

Descrição

Origin

Sim

Especifique os sites ou endereços IP que podem acessar os recursos do OSS cross-origin.

  • Use o formato protocol://domain or IP address[:port], por exemplo, https://www.example.com ou http://192.168.1.1:8080.

  • O caractere curinga * é aceito, mas cada origem pode conter apenas um.

    • Exemplos válidos: https://.example.com, http://localhost: ou http://192.168.1.1:8080.

    • Exemplos inválidos: https://.example. ou https://*.

  • Múltiplas origens são permitidas, uma por linha.

Allowed Methods

Sim

Especifique os métodos HTTP permitidos.

  • Valores válidos: GET, PUT, POST, DELETE e HEAD.

  • Múltiplos métodos são permitidos.

Allowed Headers

Não

Especifique os cabeçalhos HTTP permitidos nas requisições reais. Esta configuração se aplica a requisições de preflight.

  • O caractere curinga * é aceito e permite todos os cabeçalhos.

  • Múltiplos cabeçalhos são permitidos, um por linha, e não há distinção entre maiúsculas e minúsculas.

Exposed Headers

Não

Especifique quais cabeçalhos nas respostas do OSS o JavaScript do frontend pode acessar.

  • O caractere curinga * não é aceito.

  • Múltiplos cabeçalhos são permitidos, um por linha.

Para obter ETag ou x-oss-request-id no JavaScript, adicione-os aqui.

Cache Timeout (Seconds)

Não

Especifique por quanto tempo, em segundos, o navegador armazena em cache um resultado de preflight OPTIONS.

Durante o período de validade do cache, requisições cross-origin idênticas para o mesmo recurso não geram nova requisição de preflight.

Vary: Origin

Não

Defina se o cabeçalho Vary: Origin deve ser adicionado à resposta.

Este cabeçalho instrui os CDNs e outros caches intermediários a distinguir as versões em cache pelo cabeçalho Origin da requisição, a fim de evitar poluição de cache quando múltiplas origens acessam o recurso.

Importante

Ative esta opção quando a origem tiver múltiplos domínios ou um caractere curinga. A ativação pode reduzir a taxa de acertos do cache do CDN.

Aplicar em produção

Melhores práticas de segurança

  • Configure origens precisas: A menos que o bucket seja totalmente público, não defina a origem como *. Especifique os domínios do site com precisão.

  • Restrinja os métodos permitidos: Exponha apenas os métodos HTTP exigidos pelo seu aplicativo. Para cenários de somente leitura, configure apenas GET e HEAD.

  • Liste explicitamente os cabeçalhos permitidos: Siga o princípio do menor privilégio. Liste explicitamente os cabeçalhos de requisição necessários sempre que possível e evite usar *.

Melhores práticas de desempenho

  • Otimize o cache de preflight: Defina uma duração de cache razoável, como 86400 segundos, para reduzir as requisições de preflight, a latência e os custos de requisição.

  • Avalie o efeito do Vary: Origin: A ativação desta opção evita a poluição do cache, mas pode reduzir a taxa de acertos do cache do CDN e aumentar os custos de tráfego de volta à origem. Ative-a apenas para múltiplas origens ou caracteres curinga.

Uso com CDN

Se um bucket tem a aceleração de CDN ativada e você o acessar por meio de um nome de domínio acelerado, as requisições cross-origin chegam primeiro a um ponto de presença do CDN. Configure o CORS de uma das seguintes maneiras:

  • Configure o CORS no CDN: Configure as regras CORS no console do CDN para que o CDN retorne diretamente os cabeçalhos CORS. Para mais informações, consulte Configure cross-origin resource sharing.

  • Repasse os cabeçalhos CORS da origem: O CDN repassa os cabeçalhos CORS retornados pelo OSS. Nesse caso, configure as regras CORS no OSS.

As configurações de CORS no OSS entram em vigor apenas quando as requisições acessam diretamente o nome de domínio de origem do OSS ou quando o CDN está configurado para repassar os cabeçalhos de resposta da origem.

Limites

É possível configurar até 20 regras CORS por bucket.

Perguntas frequentes

Por que ocorre o erro “No 'Access-Control-Allow-Origin' header is present on the requested resource”?

Este erro geralmente ocorre porque o navegador armazenou em cache uma resposta antiga sem um cabeçalho CORS, ou porque as regras CORS estão configuradas de modo que nenhuma corresponda à requisição. Solucione o problema da seguinte forma:

  1. Limpe o cache do navegador e teste novamente.

  2. Verifique se a origem e os métodos permitidos da regra CORS correspondem à requisição real.

  3. Crie temporariamente uma regra CORS permissiva para solucionar problemas: defina a origem como *, selecione todos os métodos permitidos, defina os cabeçalhos permitidos como *, defina os cabeçalhos expostos como ETag e x-oss-request-id, defina a duração do cache como 0 e selecione Vary: Origin.

  4. Se o problema persistir, execute o seguinte comando em um servidor para visualizar os cabeçalhos da requisição cross-origin:

    curl -v -H 'Origin: <origin-address>' '<OSS-resource-URL>' -o output.txt

    Solucione o problema de acordo com a saída:

    • Se a resposta contiver um cabeçalho cross-origin correspondente à configuração, o cache do navegador pode ser a causa. Pressione Ctrl+F5 para limpar o cache do navegador ou defina a duração do cache como 0.

    • Se a resposta contiver dois cabeçalhos cross-origin ou um cabeçalho que não corresponda à configuração, o OSS pode estar acelerado pelo CDN.

      • Acesse o CDN console e desative temporariamente a aceleração do CDN para confirmar que não há problemas de cross-origin.

      • Após a confirmação, configure um cabeçalho de resposta personalizado em Cache > Modify Outgoing Response Header para o nome de domínio acelerado pelo CDN.

  5. Se o problema persistir, consulte Common errors and solutions for OSS Cross-Origin Resource Sharing (CORS) para obter mais soluções.

Por que ocorre o erro “The 'Access-Control-Allow-Origin' header has a value '...' that is not equal to the supplied origin”?

O servidor retornou o cabeçalho Access-Control-Allow-Origin, mas seu valor não corresponde ao Origin da requisição atual. Geralmente, isso indica um problema de cache: quando múltiplos domínios de sites acessam o OSS, o navegador ou o CDN podem reter a permissão de acesso para outro site.

Solução: Ative o Vary: Origin na regra CORS ou limpe o cache do navegador e acesse o recurso novamente.

Por que ocorre o erro “The value of the 'Access-Control-Allow-Origin' header must not be the wildcard '*' when credentials mode is 'include'”?

O aplicativo frontend envia uma requisição com credenciais (Access-Control-Allow-Credentials é True), mas a origem está configurada como o caractere curinga *. Por motivos de segurança, os navegadores não permitem origens curinga nesse caso.

Solução:

  • Se as Credentials precisarem permanecer na requisição, altere a origem de * para um domínio específico, como https://example.com, e certifique-se de que Access-Control-Allow-Credentials esteja definido como true no servidor.

  • Se as Credentials não forem necessárias, defina xhr.withCredentials como false no código do frontend e certifique-se de que Access-Control-Allow-Credentials esteja definido como false ou não seja retornado pelo servidor.

Por que o Access-Control-Allow-Origin no nível de objeto não entra em vigor?

O Access-Control-Allow-Origin no nível de objeto entra em vigor apenas quando nenhuma regra CORS no nível de bucket estiver configurada. Se as regras CORS no nível de bucket estiverem configuradas, o Access-Control-Allow-Origin no nível de objeto será ignorado, independentemente de a requisição corresponder ou não às regras.

Como melhorar o carregamento cross-origin lento a partir do OSS?

A velocidade de carregamento das requisições cross-origin depende do caminho físico de rede entre o cliente e o bucket do OSS, e não do CORS em si. O acesso de longa distância pode ocorrer quando o cliente está em China (Hong Kong) e o bucket está na China continental. Use OSS transfer acceleration para acessar o bucket.