Compartilhamento de recursos entre origens (CORS, na sigla em inglês)

A política de mesma origem (em inglês) é uma política de segurança imposta a aplicativos da Web no lado do cliente, como navegadores da Web, para evitar interações entre recursos de origens diferentes. Mesmo que ela seja útil para impedir comportamentos maliciosos, essa medida de segurança também impede interações legítimas entre origens conhecidas. Por exemplo, um script em uma página hospedada no App Engine em example.appspot.com pode precisar usar recursos armazenados em um intervalo do Cloud Storage em example.storage.googleapis.com. No entanto, como essas são duas origens diferentes da perspectiva do navegador, ele não permitirá que um script de example.appspot.com busque recursos em example.storage.googleapis.com.

A especificação Compartilhamento de recursos entre origens (CORS, na sigla em inglês) (em inglês) foi desenvolvida pelo World Wide Web Consortium (W3C) (em inglês) para contornar essa limitação. O Cloud Storage é compatível com esta especificação permitindo que você configure seus intervalos para aceitarem o CORS. Continuando com o exemplo acima, você pode configurar o intervalo example.storage.googleapis.com para que um navegador possa compartilhar seus recursos com scripts de example.appspot.com.

Como funciona o CORS

Há dois tipos de solicitações de CORS, simples e de confirmação. Uma solicitação simples pode ser iniciada diretamente. Uma solicitação de confirmação precisa enviar uma solicitação preliminar de "comprovação" ao servidor para conseguir permissão antes que a solicitação principal possa continuar. Uma solicitação é de confirmação se alguma das circunstâncias a seguir for verdadeira:

  • Ela usa métodos diferentes de GET, HEAD ou POST.
  • Ela usa o método POST com um Content-Type diferente de text/plain, application/x-www-form-urlencoded ou multipart/form-data.
  • Ela define cabeçalhos personalizados.

O processo a seguir ocorre quando um navegador faz uma solicitação simples ao Cloud Storage:

  1. O navegador adiciona o cabeçalho Origin à solicitação. O cabeçalho Origin contém a origem do recurso que procura compartilhar os recursos do outro domínio, por exemplo, Origin:http://www.example.appspot.com.

  2. O Cloud Storage compara o método HTTP da solicitação e o valor do cabeçalho Origin com as informações de Métodos e Origens na configuração do CORS do intervalo de destino para ver se há correspondências. Se houver, o Cloud Storage inclui o cabeçalho Access-Control-Allow-Origin na resposta. O cabeçalho Access-Control-Allow-Origin contém o valor do cabeçalho Origin da solicitação inicial.

  3. O navegador recebe a resposta e verifica se o valor Access-Control-Allow-Origin corresponde ao domínio especificado na solicitação original. Se eles corresponderem, a solicitação será bem-sucedida. Se eles não corresponderem ou se o cabeçalho Access-Control-Allow-Origin não estiver presente na resposta, a solicitação apresentará falha.

Uma solicitação de confirmação executa primeiro as etapas a seguir. Se for bem-sucedida, segue o mesmo processo que uma solicitação simples:

  1. O navegador envia uma solicitação OPTIONS que contém o Requested Method e os Requested Headers da solicitação principal.

  2. O servidor responde com os valores dos métodos HTTP e cabeçalhos permitidos pelo recurso de destino. Se algum dos valores de método ou cabeçalho na solicitação de confirmação não estiver no conjunto de métodos e cabeçalhos permitidos pelo recurso de destino, a solicitação apresentará falha e a solicitação principal não será enviada.

Esta é uma descrição muito simplificada do CORS. Para uma descrição mais completa, leia as especificações de Compartilhamento de recursos entre origens.

Compatibilidade entre CORS e Cloud Storage

O Cloud Storage permite definir a configuração do CORS somente no nível do intervalo. Para definir a configuração do CORS de um intervalo, use a ferramenta de linha de comando gsutil, API XML ou API JSON.

Para mais informações sobre como configurar o CORS em um intervalo, consulte Como configurar o compartilhamento de recursos entre origens (CORS). Para mais informações sobre os elementos de configuração do CORS, consulte Definir CORS de intervalo.

Você pode usar um dos URLs de solicitação da API XML a seguir para conseguir uma resposta do Cloud Storage que contenha os cabeçalhos do CORS:

storage.googleapis.com/[BUCKET_NAME]
[BUCKET_NAME].storage.googleapis.com

Para informações sobre URLs de solicitação da API XML, consulte Solicitar pontos de extremidade.

Suporte ao CORS do lado do cliente

A maioria dos navegadores usa o objeto XMLHttpRequest para fazer uma solicitação entre domínios. A XMLHttpRequest cuida de todo o trabalho de inserção dos cabeçalhos corretos e da manipulação da interação do CORS com o servidor. Não é necessário adicionar nenhum código novo para aproveitar a compatibilidade com o CORS nos intervalos do Cloud Storage.