Todos os produtos
Search
Central de documentação

Object Storage Service:Configure cross-origin resource sharing (CORS)

Última atualização: Jul 03, 2026

Os navegadores podem bloquear requisições de origem cruzada para o Object Storage Service (OSS) devido à política de mesma origem, que restringe o acesso ao mesmo protocolo, domínio e porta. Por exemplo, uma página em https://www.example.com não consegue carregar recursos de https://example-bucket.oss-cn-hangzhou.aliyuncs.com/test.jpg.image Configure regras de CORS no bucket para autorizar sites específicos a acessar recursos do OSS diretamente.

Como funciona

As requisições CORS dividem-se em dois tipos: requisições simples (enviadas diretamente) e requisições preflight (que exigem verificação de autorização antes da requisição principal).

Uma requisição preflight é necessária se qualquer uma das condições abaixo for atendida:

  • A requisição utiliza um método diferente de GET, HEAD ou POST.

  • A requisição usa o método POST com um Content-Type diferente de text/plain, application/x-www-form-urlencoded ou multipart/form-data.

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

Quando um navegador envia uma requisição simples para o OSS, ocorre o seguinte processo:

  1. O navegador adiciona um cabeçalho Origin à requisição. Esse cabeçalho especifica a origem da página solicitante, por exemplo, Origin: https://www.example.com.

  2. O OSS verifica o método HTTP e o cabeçalho Origin da requisição em relação às regras de CORS do bucket para encontrar uma correspondência. Se houver correspondência, o OSS inclui o cabeçalho Access-Control-Allow-Origin na resposta. O valor desse cabeçalho corresponde ao valor do cabeçalho Origin da requisição inicial.

  3. O navegador recebe a resposta e permite que a requisição prossiga apenas se o cabeçalho Access-Control-Allow-Origin estiver presente e seu valor corresponder ao domínio da página. Caso contrário, a requisição falha.

Uma requisição preflight adiciona as etapas a seguir antes do fluxo de requisição simples. Se bem-sucedida, ela segue o mesmo processo de uma requisição simples:

  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 pretendida.

  2. O OSS verifica se o método e os cabeçalhos da requisição são permitidos com base na configuração de CORS. Se a requisição preflight incluir qualquer método ou cabeçalho não permitido pelas regras, a requisição falha e a requisição principal não é enviada.

Carregar recursos de site estático

Um site em https://www.example.com precisa carregar imagens, CSS e arquivos JS armazenados em um bucket do OSS.

Etapa 1: Configurar uma regra de CORS

Faça login no OSS console. Acesse a página Content Security > CORS do bucket de destino e crie uma regra conforme descrito abaixo:

Parameter

Value

Description

Origin

https://www.example.com

Restringe o acesso a este site.

Allowed Methods

GET, HEAD

GET baixa recursos; HEAD valida caches.

Allowed Headers

Empty

Não obrigatório — requisições simples não disparam preflight.

Exposed Headers

ETag, Content-Length

  • ETag permite que os navegadores validem caches com requisições HEAD. Se o objeto não foi alterado, o servidor retorna uma resposta 304 Not Modified para evitar novo download.

  • Content-Length pode ser usado para exibir o progresso de carregamento do recurso no frontend.

Cached Timeout (Seconds)

86400

Armazena em cache os resultados do preflight por 24 horas.

Vary: Origin

Unchecked

Desnecessário para uma única origem específica.

Etapa 2: Verificar a configuração

Acesse https://www.example.com e confirme se os recursos do OSS, como imagens, carregam corretamente e se não há erros de CORS no console do navegador.

Fazer upload de arquivos diretamente pelo frontend

Um usuário na página web https://app.example.com faz upload de arquivos, como avatares e documentos, diretamente para o OSS.

Etapa 1: Configurar uma regra de CORS

Faça login no OSS console. Acesse a página Content Security > CORS do bucket de destino e crie uma regra conforme descrito abaixo:

Parameter

Value

Description

Origin

https://app.example.com

Restringe uploads a esta aplicação autorizada.

Allowed Methods

PUT, POST

PUT ou POST são necessários para uploads.

Allowed Headers

*

Uploads diretos usam assinaturas temporárias (URLs pré-assinadas) em vez de um cabeçalho Authorization fixo por questões de segurança. O caractere acomoda vários cabeçalhos de SDK (por exemplo, x-oss-meta-) sem introduzir riscos.

Exposed Headers

ETag, x-oss-request-id

  • ETag: Identificador único para um upload de arquivo bem-sucedido, usado para verificação posterior.

  • x-oss-request-id: Usado para solucionar problemas em uploads com falha.

Cached Timeout (Seconds)

600

Um cache de 10 minutos equilibra a redução de preflights com atualizações rápidas de configuração.

Vary: Origin

Checked

Evita poluição de cache do CDN em possíveis implantações multidomínio.

Etapa 2: Verificar a configuração

Execute uma operação de upload na página https://app.example.com e confirme se o arquivo foi enviado com sucesso para o OSS e se não há erros de CORS no console do navegador.

Suporte a múltiplos ambientes

Vários subdomínios para desenvolvimento, teste e produção, como dev.example.com e app.example.com, precisam acessar os mesmos recursos do OSS.

Etapa 1: Configurar uma regra de CORS

Faça login no OSS console. Acesse a página Content Security > CORS do bucket de destino e crie uma regra conforme descrito abaixo:

Parameter

Value

Description

Origin

https://*.example.com

O curinga * autoriza todos os subdomínios HTTPS sob example.com.

Allowed Methods

GET, PUT, POST

Suporta leitura e upload em todos os ambientes.

Allowed Headers

*

O curinga * evita alterações frequentes nas regras de CORS à medida que os ambientes introduzem diferentes cabeçalhos personalizados.

Exposed Headers

ETag, x-oss-request-id

Suporta tanto a validação de download quanto o feedback de resultado de upload.

Cached Timeout (Seconds)

3600

Um cache de 1 hora equilibra desempenho com flexibilidade para depuração.

Vary: Origin

Checked

Obrigatório. Instrui o CDN a armazenar respostas em cache por Origin, evitando conflitos entre ambientes.

Etapa 2: Verificar a configuração

Realize testes de acesso ou upload tanto em https://dev.example.com quanto em https://app.example.com para confirmar se todas as operações foram bem-sucedidas.

Fazer chamadas estilo API com autenticação

Uma aplicação frontend em https://api.example.com precisa acessar recursos protegidos do OSS incluindo cabeçalhos personalizados como Authorization.

Etapa 1: Configurar uma regra de CORS

Faça login no OSS console. No bucket de destino, acesse a página Content Security > CORS e crie uma regra conforme descrito abaixo:

Parameter

Value

Description

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

Suporta leitura, atualização e exclusão de recursos privados.

Allowed Headers

authorization, content-type, x-oss-*

Não use *. Liste explicitamente os cabeçalhos necessários (princípio do menor privilégio).

Exposed Headers

ETag, x-oss-request-id

Fornece um identificador de verificação para operações bem-sucedidas e um ID para solução de problemas.

Cached Timeout (Seconds)

600

Um cache mais curto (10 minutos) garante que alterações na política de segurança sejam aplicadas rapidamente.

Vary: Origin

Selecione

Garante que o CDN armazene respostas em cache separadamente por origem.

Etapa 2: Verificar a configuração

Inicie uma requisição com um cabeçalho Authorization a partir da página https://api.example.com e confirme se você consegue acessar o recurso protegido do OSS.

Aplicar em produção

Melhores práticas de segurança

Siga o princípio do menor privilégio.

  • Configure Origin (AllowedOrigin) com precisão: Evite definir * para Sources, a menos que seu bucket seja totalmente público. Especifique domínios exatos, como https://www.example.com.

  • Restrinja Allowed Methods: Exponha apenas os métodos HTTP necessários à sua aplicação. Para sites somente leitura, configure apenas GET e HEAD.

  • Especifique Allowed Headers explicitamente: Para requisições autenticadas (com cabeçalho Authorization), não use *. Liste todos os cabeçalhos de requisição necessários explicitamente.

Melhores práticas de desempenho

  • Otimize o cache de preflight: Um valor razoável para MaxAgeSeconds, como 86400 segundos (24 horas), reduz significativamente as requisições preflight, diminuindo a latência e o custo.

  • Avalie o impacto de Vary: Origin: Ativar Vary: Origin resolve problemas de envenenamento de cache, mas aumenta a complexidade do cache do CDN. Isso pode reduzir a taxa de acerto do cache e aumentar o tráfego de retorno à origem (custo e latência adicionais). Ative essa opção somente após avaliar seus padrões de tráfego.

Aceleração via CDN

Se o seu bucket for acelerado pelo Alibaba Cloud CDN e acessado por meio de um domínio CDN, as requisições de origem cruzada chegarão primeiro a um Ponto de Presença (PoP) do CDN. Configure as regras de CORS no console do CDN, e não no console do OSS. A configuração de CORS no OSS aplica-se apenas a requisições feitas diretamente ao domínio de origem do OSS. Para obter detalhes, consulte Configurar compartilhamento de recursos de origem cruzada.

Parâmetros das regras de CORS

É possível configurar até 20 regras de CORS para cada bucket. O OSS avalia as regras sequencialmente, de cima para baixo, e aplica a primeira que corresponder à requisição. Após encontrar uma correspondência, o OSS não verifica as regras subsequentes.

Parameter

Required

Description

Origin (AllowedOrigin)

Yes

Especifica os sites (domínios de origem) que têm permissão para fazer requisições de origem cruzada aos recursos do OSS.

  • O formato é protocol://domain[:port]. Exemplo: https://www.example.com.

  • O curinga * é suportado, mas só pode ser usado uma vez em cada origem.

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

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

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

Allowed Methods (AllowedMethod)

Yes

Especifica os métodos HTTP permitidos.

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

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

Allowed Headers (AllowedHeader)

No

Aplica-se a requisições preflight e determina quais cabeçalhos HTTP podem ser incluídos na requisição real.

  • O caractere curinga * é suportado, permitindo todos os cabeçalhos.

  • Múltiplos cabeçalhos são permitidos, um por linha. Os cabeçalhos NÃO diferenciam maiúsculas de minúsculas.

Exposed Headers (ExposeHeader)

No

Especifica quais cabeçalhos de resposta do OSS estão acessíveis ao JavaScript no lado do cliente.

  • O caractere curinga * não é suportado.

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

  • Caso de uso: Para obter o ETag ou o x-oss-request-id de um arquivo enviado via JavaScript, adicione ETag e x-oss-request-id a este parâmetro.

Cached Timeout (MaxAgeSeconds)

No

Especifica o tempo, em segundos, durante o qual um navegador pode armazenar em cache o resultado de uma requisição OPTIONS preflight.

  • Efeito: Dentro da duração do cache, requisições subsequentes idênticas de origem cruzada para o mesmo recurso não dispararão uma nova requisição preflight, o que otimiza o desempenho.

Vary: Origin

No

Determina se o cabeçalho de resposta HTTP Vary: Origin será adicionado. Este cabeçalho informa aos CDNs e outros caches intermediários para armazenarem versões diferentes do recurso com base no cabeçalho Origin da requisição. Isso evita a poluição do cache quando múltiplas origens acessam o mesmo recurso.

  • Caso de uso: Para evitar poluição de cache ao configurar múltiplos domínios ou um curinga para o parâmetro Sources, ative esta opção.

Importante

Ativar esta opção pode diminuir a taxa de acerto do cache do CDN.

FAQ

Erro: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Esse erro geralmente significa que o navegador armazenou em cache uma resposta antiga sem cabeçalhos CORS ou que nenhuma regra de CORS corresponde à requisição recebida.

Limpe o cache do navegador e teste novamente. Se o erro persistir, verifique suas regras de CORS:

  1. Faça login no OSS console.

  2. Clique em Buckets e, em seguida, clique no nome do bucket de destino.

  3. No painel de navegação à esquerda, escolha Content Security > CORS.

  4. Na página CORS, clique em Create Rule.

  5. No painel Create CORS Rule, defina Origin como *, selecione todos os Allowed Methods, defina Allowed Headers como *, defina Exposed Headers como ETag e x-oss-request-id, defina Cache Timeout (Seconds) como 0, selecione Vary: Origin e clique em OK.

  6. Se o problema persistir, faça login em qualquer servidor e execute o comando a seguir para visualizar os cabeçalhos da requisição de origem cruzada.

    curl -v -o output_file.txt -H 'Origin:[$URL2]' '[$URL1]'
    Nota
    • [URL1] é a URL do recurso do OSS solicitado.

    • [URL2] é o endereço de origem configurado na regra de CORS.

    O sistema exibe uma saída semelhante à seguinte.

    • Se a resposta incluir um cabeçalho CORS correspondente, o problema provavelmente é cache do navegador ou da rede. Uma requisição anterior sem CORS pode ter sido armazenada em cache localmente, e uma requisição subsequente de origem cruzada buscou essa resposta em cache em vez de obter uma nova do servidor. Tente as seguintes soluções:

      • Pressione Ctrl+F5 no navegador para limpar o cache e teste se o problema persiste.

      • Defina Cached-Seconds como 0 na regra de CORS. Isso força cada requisição a buscar novamente a autorização CORS no servidor.

        Nota

        Você pode definir o cache-control de um objeto como no-cache ao fazer o upload dele. Para objetos já enviados, use o ossutil para alterar essa configuração. Para obter mais informações, consulte set-meta (Gerenciar metadados de objeto).

      • Use o CDN para acelerar o OSS, garantindo que todas as requisições servidas pelo CDN incluam cabeçalhos CORS.

    • Se a resposta contiver dois cabeçalhos CORS ou um cabeçalho que não corresponda à sua configuração do OSS, o problema provavelmente é causado pelo uso do CDN para acelerar o OSS:

      1. Faça login no CDN console e desative temporariamente a aceleração do CDN para o nome de domínio a fim de confirmar que o problema de origem cruzada foi resolvido.

      2. Após a confirmação, clique no nome de domínio específico e acesse Cache Configuration > Node HTTP Response Header.

      3. Defina cabeçalhos de resposta HTTP personalizados conforme necessário.

  7. Se o problema de CORS ainda não for resolvido, consulte Erros comuns e soluções para CORS no OSS para obter mais instruções de solução de problemas.

Erro: The 'Access-Control-Allow-Origin' header has a value '...' that is not equal to the supplied origin.

O servidor retornou um cabeçalho Access-Control-Allow-Origin, mas seu valor não corresponde ao Origin da requisição. Isso geralmente é um problema de cache — um navegador ou CDN armazena a resposta para um domínio e a serve para outro.

Ative a opção Vary: Origin na sua regra de CORS para evitar conflitos de cache entre sites diferentes ou limpe o cache do navegador antes de tentar novamente.

Erro: Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.

Esse erro ocorre porque o frontend enviou uma requisição com credenciais (Access-Control-Allow-Credentials é True), mas Access-Control-Allow-Origin está definido como *. Os navegadores proíbem essa combinação para evitar que qualquer site acesse dados confidenciais, como cookies ou tokens de Authorization.

  • Se você precisar de credenciais, altere Sources de * para um domínio específico (por exemplo, https://example.com).

  • Se não precisar de credenciais, defina xhr.withCredentials como false no código do frontend e garanta que Access-Control-Allow-Credentials seja false no servidor.

Como melhorar o carregamento lento de origem cruzada a partir do OSS?

A velocidade de carregamento de origem cruzada depende da latência da rede entre o cliente e o bucket do OSS. Uma requisição de origem cruzada inclui um cabeçalho Origin. Para acessos de longa distância (por exemplo, China (Hong Kong) para a China continental), use um endpoint de Transfer Acceleration para otimizar o caminho da rede.

Nota

O Transfer Acceleration otimiza os caminhos de rede para melhorar as velocidades globais de transferência de dados.