

 O [Guia de referência da API do AWS SDK para JavaScript V3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) descreve em detalhes todas as operações da API para o AWS SDK para JavaScript versão 3 (V3). 

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Compartilhamento de recursos de origem cruzada (CORS)
<a name="cors"></a>

O compartilhamento de recursos de origem cruzada, ou CORS, é um recurso de segurança de navegadores da web modernos. Isso permite que navegadores da web negociem quais domínios podem fazer solicitações de sites ou serviços externos. 

CORS é uma consideração importante durante o desenvolvimento de aplicativos de navegador com o AWS SDK para JavaScript porque a maioria das solicitações de recursos é enviada para um domínio externo, como o endpoint de um serviço da web. Se o ambiente do JavaScript impuser segurança CORS, você deverá configurar CORS com o serviço.

O CORS determina se é necessário permitir o compartilhamento de recursos em uma solicitação entre origens com base em:
+ O domínio específico que faz a solicitação 
+ O tipo de solicitação HTTP feita (GET, PUT, POST, DELETE etc.)

## Como funciona o CORS
<a name="how-cors-works"></a>

No caso mais simples, o script de navegador faz uma solicitação GET para um recurso de um servidor em outro domínio. Dependendo da configuração CORS desse servidor, se a solicitação for de um domínio autorizado para enviar solicitações GET, o servidor de origem cruzada responderá retornando o recurso solicitado.

Se o domínio solicitante ou o tipo de solicitação HTTP não estiver autorizado, a solicitação será negada. No entanto, CORS possibilita simular a solicitação antes de enviá-la efetivamente. Neste caso, uma solicitação de simulação é feita em que a operação de solicitação de acesso `OPTIONS` é enviada. Se o servidor de origem cruzada da configuração CORS conceder acesso ao domínio solicitante, o servidor reenviará uma resposta de simulação que lista todos os tipos de solicitação HTTP que o domínio solicitante pode fazer no recurso solicitado.

![\[Fluxo do processo de solicitações CORS\]](http://docs.aws.amazon.com/pt_br/sdk-for-javascript/v3/developer-guide/images/cors-overview.png)


## A configuração de CORS é obrigatória?
<a name="the-need-for-cors-configuration"></a>

Os buckets do Amazon S3 exigem a configuração de CORS para realizar operações neles. Em alguns ambientes JavaScript, o CORS talvez não seja imposto e, por isso, configurar o CORS é desnecessário. Por exemplo, se você hospedar o aplicativo de um bucket do Amazon S3 e acessar recursos de `*.s3.amazonaws.com` ou algum outro endpoint específico, as solicitações não acessarão um domínio externo. Por isso, essa configuração não exige CORS. Nesse caso, o CORS continua sendo usado em serviços que não sejam o Amazon S3.

## Configurar o CORS para um bucket do Amazon S3
<a name="configuring-cors-s3-bucket"></a>

Você pode configurar um bucket do Amazon S3 para usar o CORS no console do Amazon S3.

Se você estiver configurando o CORS no Console de Gerenciamento da AWS Web Services, use o JSON para criar uma configuração CORS. O novo Console de Gerenciamento da AWS Web Services oferece suporte somente a configurações JSON CORS. 

**Importante**  
No novo Console de Gerenciamento da AWS Web Services, a configuração CORS deve ser JSON.

1. No Console de Gerenciamento da AWS Web Services, abra o console do Amazon S3, encontre o bucket que você deseja configurar e marque sua caixa de seleção.

1. No painel que é aberto, escolha **Permissões**.

1. Na guia **Permissão**, escolha **Configuração de CORS**.

1. Digite a configuração de CORS no **Editor de configuração de CORS** e escolha **Salvar**.

A configuração do CORS é um arquivo XML que contém uma série de regras dentro de um `<CORSRule>`. Uma configuração pode ter até 100 regras. Uma regra é definida por uma das seguintes tags:
+ `<AllowedOrigin>`: especifica as origens de domínio permitidas para fazer solicitações entre domínios.
+ `<AllowedMethod>`: especifica um tipo de solicitação permitida (GET, PUT, POST, DELETE, HEAD) em solicitações entre domínios.
+ `<AllowedHeader>`: especifica os cabeçalhos permitidos em uma solicitação de comprovação.

Para exemplos de configuração, consulte [Como configurar CORS no meu bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html#how-do-i-enable-cors) no *Guia do usuário do Amazon Simple Storage Service*.

## Exemplo de configuração do CORS
<a name="cors-configuration-example"></a>

O exemplo de configuração do CORS a seguir permite que um usuário visualize, adicione, remova ou atualize objetos dentro de um bucket do domínio `example.org`. No entanto, recomendamos definir como escopo `<AllowedOrigin>` para o domínio do seu site. Especifique `"*"` para permitir qualquer origem.

**Importante**  
No novo console do S3, a configuração CORS deve ser JSON.

------
#### [ XML ]

```
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <CORSRule>
    <AllowedOrigin>https://example.org</AllowedOrigin>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
    <ExposeHeader>ETag</ExposeHeader>
    <ExposeHeader>x-amz-meta-custom-header</ExposeHeader>
  </CORSRule>
</CORSConfiguration>
```

------
#### [ JSON ]

```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "HEAD",
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "https://www.example.org"
        ],
        "ExposeHeaders": [
             "ETag",
             "x-amz-meta-custom-header"]
    }
]
```

------

Essa configuração não autoriza o usuário para executar ações no bucket. Ela permite que o modelo de segurança do navegador faça uma solicitação ao Amazon S3. As permissões devem ser configuradas por meio de permissões do bucket ou permissões do perfil do IAM.

Use `ExposeHeader` para permitir que os cabeçalhos de resposta de leitura do SDK sejam retornados do Amazon S3. Por exemplo, para ler o cabeçalho `ETag` de um `PUT` ou de um upload de várias partes, você precisará incluir a tag `ExposeHeader` na configuração, conforme mostrado no exemplo anterior. O SDK só pode acessar cabeçalhos expostos por meio da configuração do CORS. Se você definir metadados no objeto, os valores serão retornados como cabeçalhos com o prefixo `x-amz-meta-`, como `x-amz-meta-my-custom-header`, e também deverão ser expostos da mesma maneira.