# Configure Cross-Origin Resource Sharing (CORS)

**Cross-Origin Resource Sharing (CORS)** é um mecanismo que se utiliza de cabeçalhos HTTP para dar permissão de acesso a determinados recursos que estão em uma origem diferente do documento em uso.

Um exemplo de cross-origin request é uma página HTML servida a partir de um domínio “A” que solicita um arquivo, como um CSS stylesheet ou um JavaScript, por exemplo, servido a partir de um domínio “B”. Por questões de segurança, muitos navegadores restringem cross-origin HTTP requests iniciadas por scripts.

Para permitir o CORS em uma configuração para requisições não complexas, você deve adicionar o cabeçalho `Access-Control-Allow-Origin` à resposta.

Já requisições HTTP complexas exigem cabeçalhos adicionais. Essas são requisições que podem envolver vários parâmetros, cabeçalhos, autenticação, corpos de requisição ou outras configurações especializadas. Qualquer requisição além de `GET`, `POST` e `HEAD` pode ser considerada complexa.

---

## Habilite permissão CORS para requisições HTTP não complexas

A primeira etapa para permitir o acesso CORS é criar uma regra no [Rules Engine](/pt-br/documentacao/produtos/build/applications/rules-engine/):

1. Acesse o [Azion Console](https://console.azion.com).
2. Selecione **Products Menu** > **Applications**.
3. Selecione a aplicação com a qual deseja trabalhar.
4. Na aba **Rules Engine**, crie uma nova regra.
5. Preencha os campos como no exemplo a seguir:

| Campo | Valor |
|-----------|------|
| **Name** | GET/POST/HEAD CORS |
| **Description** | Permite CORS para requisições GET em /sua-uri |
| **Phase** | Response Phase |
| **Criteria** | `${uri}` *starts with* `/sua-uri` |
| **Behavior** | **Add Response Header** `Access-Control-Allow-Origin: *` |

6. Clique no botão **Save**.

Você acabou de criar uma regra para o compartilhamento de requisições não complexas com CORS. 

---

## Habilite permissão CORS para requisições HTTP complexas

No exemplo a seguir, o CORS está sendo permitido por meio do método `OPTIONS`. Para criar uma nova regra que permita habilitar o compartilhamento de recursos por meio de requisições complexas, siga as etapas:

1. Acesse o [Azion Console](https://console.azion.com).
2. Selecione **Products Menu** > **Applications**.
3. Selecione a aplicação com a qual deseja trabalhar.
4. Na aba **Rules Engine**, crie uma nova regra.
5. Preencha os campos:

| Campo | Valor |
|-----------|------|
| **Name** | OPTIONS CORS |
| **Description** | Permite CORS para OPTIONS em /sua-uri e outras requisições não complexas | 
| **Phase** | Response Phase |
| **Criteria** | `${uri}` *starts with* `/your-uri` |
| **Behavior** | **Add Response Header** `Access-Control-Allow-Origin: *`<br />**Add Response Header** `Access-Control-Allow-Headers: Content-Type, Authorization`<br />**Add Response Header** `Access-Control-Request-Method: POST, GET, OPTIONS, HEAD`<br />**Add Response Header** `Allow: POST, GET, OPTIONS, HEAD`<br />**Add Response Header** `Access-Control-Allow-Methods: POST, GET, OPTIONS, HEAD` |

:::tip
Você pode configurar outros tipos de requisições complexas conforme desejar, adicionando-os aos valores dos cabeçalhos `Allow`, `Access-Control-Allow-Methods` e `Access-Control-Allow-Origin`. Você também pode personalizar o formato da resposta no cabeçalho `Content-Type` para atender às suas necessidades.
:::

6. Clique no botão **Save**.

---

## Habilite permissão CORS para origens específicas

Para ativar o CORS em uma configuração para servidores de origem específicos, você precisará ativar o módulo [Application Accelerator](/pt-br/documentacao/produtos/build/applications/application-accelerator/):

1. Acesse o [Azion Console](https://console.azion.com).
2. Selecione **Products menu** > **Applications**.
3. Selecione a aplicação com a qual deseja trabalhar.
4. Na aba **Main Settings**, ative o módulo **Application Accelerator**.
5. Clique no botão **Save**.

Agora você precisa criar uma regra que processe requisições de várias origens:

1. Vá para a aba **Rules Engine**. 
2. Clique no botão **+ Rule**.
3. Preencha os campos como no exemplo a seguir, que habilita CORS para requisições complexas:

| Campo | Valor |
|-----------|------|
| **Name** | CORS para múltiplas origens |
| **Phase** | Response Phase |
| **Criteria** | `${http_origin}` *is equal* `http://seu.domain1.com`<br />**OR** `${http_origin}` *is equal* `http://seu.domain2.com`<br />**OR** `${http_origin}` *is equal* `http://seu.domain3.com` |
| **Behavior** | **Add Response Header** `Access-Control-Allow-Origin: *`<br />**Add Response Header** `Access-Control-Allow-Headers: Content-Type, Authorization`<br />**Add Response Header** `Access-Control-Request-Method: POST, GET, OPTIONS, HEAD`<br />**Add Response Header** `Allow: POST, GET, OPTIONS, HEAD`<br />**Add Response Header** `Access-Control-Allow-Methods: POST, GET, OPTIONS, HEAD` |

4. Clique no botão **Save**.

---