

# Determinar o propósito da função
<a name="function-code-choose-purpose"></a>

Antes de escrever seu código de função, determine o propósito da sua função. A maioria das funções no CloudFront Functions tem uma das seguintes finalidades.

**Topics**
+ [Modificar a solicitação HTTP em um tipo de evento de solicitação do visualizador](#function-code-modify-request)
+ [Gerar uma resposta HTTP em um tipo de evento de solicitação do visualizador](#function-code-generate-response)
+ [Modificar a resposta HTTP em um tipo de evento de resposta do visualizador](#function-code-modify-response)
+ [Validar conexões mTLS em um tipo de evento de solicitação de conexão](#function-code-connection-request)
+ [Informações relacionadas](#related-information-cloudfront-functions-purpose)

Independentemente do propósito da sua função, o `handler` é o ponto de entrada para qualquer função. É preciso um único argumento chamado `event`, que é passado para a função pelo CloudFront. O `event` é um objeto JSON que contém uma representação da solicitação HTTP (e a resposta, se sua função modificar a resposta HTTP). 

## Modificar a solicitação HTTP em um tipo de evento de solicitação do visualizador
<a name="function-code-modify-request"></a>

Sua função pode modificar a solicitação HTTP que o CloudFront recebe do visualizador (cliente) e retornar a solicitação modificada ao CloudFront para processamento contínuo. Por exemplo, seu código de função pode normalizar a [chave de cache](understanding-the-cache-key.md) ou modificar cabeçalhos de solicitação.

Quando você criar e publicar uma função que modifica a solicitação HTTP, adicione uma associação para o tipo de evento *viewer request*. Para obter mais informações, consulte [Criar a função](functions-tutorial.md#functions-tutorial-create). Isso faz com que a função seja executada sempre que o CloudFront receber uma solicitação de um visualizador, antes de verificar se o objeto solicitado está no cache do CloudFront.

**Example Exemplo**  
O pseudocódigo a seguir mostra a estrutura de uma função que modifica a solicitação HTTP.  

```
function handler(event) {
    var request = event.request;

    // Modify the request object here.

    return request;
}
```
A função retorna o objeto `request` modificado para o CloudFront. O CloudFront continua processando a solicitação retornada verificando o cache do CloudFront quanto a uma ocorrência de cache e enviando a solicitação para a origem, se necessário.

## Gerar uma resposta HTTP em um tipo de evento de solicitação do visualizador
<a name="function-code-generate-response"></a>

Sua função pode gerar uma resposta HTTP na borda e retorná-la diretamente ao visualizador (cliente) sem verificar se há uma resposta em cache ou qualquer processamento adicional pelo CloudFront. Por exemplo, seu código de função pode redirecionar a solicitação para uma nova URL ou verificar se há autorização e retornar uma resposta `401` ou `403` a solicitações não autorizadas.

Quando você criar uma função que gera uma resposta HTTP, certifique-se de selecionar o tipo de evento *viewer request* (solicitação do visualizador). Isso significa que a função é executada sempre que o CloudFront recebe uma solicitação de um visualizador, antes que o CloudFront faça qualquer processamento adicional da solicitação.

**Example Exemplo**  
O pseudocódigo a seguir mostra a estrutura de uma função que gera uma resposta HTTP.  

```
function handler(event) {
    var request = event.request;

    var response = ...; // Create the response object here,
                        // using the request properties if needed.

    return response;
}
```
A função retorna um objeto `response` ao CloudFront, que o CloudFront retorna imediatamente ao visualizador sem verificar o cache do CloudFront ou enviar uma solicitação para a origem.

## Modificar a resposta HTTP em um tipo de evento de resposta do visualizador
<a name="function-code-modify-response"></a>

Sua função pode modificar a resposta HTTP antes que o CloudFront a envie para o visualizador (cliente), independentemente de a resposta vir do cache do CloudFront ou da origem. Por exemplo, o código da função pode adicionar ou modificar cabeçalhos de resposta, códigos de status e o conteúdo do corpo.

Ao criar uma função que modifica a resposta HTTP, certifique-se de selecionar o tipo de evento de *viewer response* (resposta do visualizador). Isso significa que a função é executada antes que o CloudFront retorne uma resposta ao visualizador, independentemente de a resposta vir do cache do CloudFront ou da origem.

**Example Exemplo**  
O pseudocódigo a seguir mostra a estrutura de uma função que modifica a resposta HTTP.  

```
function handler(event) {
    var request = event.request;
    var response = event.response;

    // Modify the response object here,
    // using the request properties if needed.

    return response;
}
```
A função retorna o objeto `response` modificado ao CloudFront, que o CloudFront retorna imediatamente ao visualizador.

## Validar conexões mTLS em um tipo de evento de solicitação de conexão
<a name="function-code-connection-request"></a>

As funções de conexão são um tipo de CloudFront Functions executadas durante conexões TLS para fornecer validação personalizada e lógica de autenticação. No momento, as funções de conexão estão disponíveis para conexões TLS mútuas (mTLS), nas quais você pode validar certificados de clientes e implementar uma lógica de autenticação personalizada além da validação padrão do certificado. As funções de conexão são executadas durante o processo de handshake do TLS e podem permitir ou negar conexões com base nas propriedades do certificado, no endereço IP do cliente ou em outros critérios.

Quando você criar e publicar uma função de conexão, adicione uma associação para o tipo de evento de *solicitação de conexão* com uma distribuição habilitada para mTLS. Isso faz com que a função seja executada sempre que um cliente tenta estabelecer uma conexão mTLS com o CloudFront.

**Example**  
O seguinte pseudocódigo mostra a estrutura de uma função de conexão:  

```
function connectionHandler(connection) {
    // Validate certificate and connection properties here.
    
    if (/* validation passes */) {
        connection.allow();
    } else {
        connection.deny();
    }
}
```
A função usa métodos auxiliares para determinar se a conexão deve ser permitida ou negada. Diferentemente das funções de solicitação de visualizador e resposta ao visualizador, as funções de conexão não podem modificar solicitações ou respostas HTTP.

## Informações relacionadas
<a name="related-information-cloudfront-functions-purpose"></a>

Para ter mais informações sobre como trabalhar com o CloudFront Functions, consulte os seguintes tópicos:
+ [Estrutura de eventos](functions-event-structure.md)
+ [Recursos de tempo de execução JavaScript](functions-javascript-runtime-features.md)
+ [Exemplos do CloudFront Functions ](service_code_examples_cloudfront_functions_examples.md)
+ [Restrições das funções de borda](edge-functions-restrictions.md)