

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Scelta dello scopo della funzione
<a name="function-code-choose-purpose"></a>

Prima di scrivere il codice funzione, è necessario determinare lo scopo della funzione. La maggior parte CloudFront delle funzioni di Functions ha uno dei seguenti scopi.

**Topics**
+ [Modifica della richiesta HTTP in un tipo di evento di richiesta visualizzatore](#function-code-modify-request)
+ [Generazione di una risposta HTTP in un tipo di evento di richiesta visualizzatore](#function-code-generate-response)
+ [Modifica della risposta HTTP in un tipo di evento di risposta visualizzatore](#function-code-modify-response)
+ [Convalida le connessioni MTL in un tipo di evento di richiesta di connessione](#function-code-connection-request)
+ [Informazioni correlate](#related-information-cloudfront-functions-purpose)

Indipendentemente dallo scopo della funzione, `handler` è il punto di ingresso per qualsiasi funzione. Richiede un solo argomento chiamato`event`, che viene passato alla funzione da CloudFront. `event` è un oggetto JSON che contiene una rappresentazione della richiesta HTTP (e la risposta, se la funzione modifica la risposta HTTP). 

## Modifica della richiesta HTTP in un tipo di evento di richiesta visualizzatore
<a name="function-code-modify-request"></a>

La funzione può modificare la richiesta HTTP CloudFront ricevuta dal visualizzatore (client) e restituire la richiesta modificata a CloudFront per continuare l'elaborazione. Ad esempio, il codice funzione potrebbe normalizzare la [chiave cache](understanding-the-cache-key.md) o modificare le intestazioni delle richieste.

Dopo aver creato e pubblicato una funzione che modifica la richiesta HTTP, assicurati di aggiungere un’associazione per il tipo di evento *richiesta visualizzatore*. Per ulteriori informazioni, consulta [Creazione della funzione](functions-tutorial.md#functions-tutorial-create). In questo modo la funzione viene eseguita ogni volta che CloudFront riceve una richiesta da un visualizzatore, prima di verificare se l'oggetto richiesto è nella CloudFront cache.

**Example Esempio**  
Il seguente pseudocodice mostra la struttura di una funzione che modifica la richiesta HTTP.  

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

    // Modify the request object here.

    return request;
}
```
La funzione restituisce l'`request`oggetto modificato a CloudFront. CloudFrontcontinua a elaborare la richiesta restituita controllando la CloudFront presenza di un hit nella cache e inviando la richiesta all'origine, se necessario.

## Generazione di una risposta HTTP in un tipo di evento di richiesta visualizzatore
<a name="function-code-generate-response"></a>

La funzione può generare una risposta HTTP all'edge e restituirla direttamente al visualizzatore (client) senza verificare la presenza di una risposta memorizzata nella cache o ulteriori elaborazioni da parte CloudFront di. Ad esempio, il codice funzione potrebbe reindirizzare la richiesta a un nuovo URL oppure verificare l'autorizzazione e restituire una risposta `401` o `403` a richieste non autorizzate.

Quando crei una funzione che genera una risposta HTTP, assicurati di scegliere il tipo di evento *richiesta del visualizzatore*. Ciò significa che la funzione viene eseguita ogni volta che CloudFront riceve una richiesta da un visualizzatore, prima CloudFront di eseguire qualsiasi ulteriore elaborazione della richiesta.

**Example Esempio**  
Il seguente pseudocodice mostra la struttura di una funzione che genera una risposta HTTP.  

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

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

    return response;
}
```
La funzione restituisce un `response` oggetto a CloudFront, che ritorna CloudFront immediatamente al visualizzatore senza controllare la CloudFront cache o inviare una richiesta all'origine.

## Modifica della risposta HTTP in un tipo di evento di risposta visualizzatore
<a name="function-code-modify-response"></a>

La funzione può modificare la risposta HTTP prima di CloudFront inviarla al visualizzatore (client), indipendentemente dal fatto che la risposta provenga dalla CloudFront cache o dall'origine. Ad esempio, il codice funzione potrebbe aggiungere o modificare le intestazioni, i codici di stato e i contenuti del corpo della risposta.

Quando crei una funzione che modifica la risposta HTTP, assicurati di scegliere il tipo di evento *risposta del visualizzatore* . Ciò significa che la funzione viene eseguita prima di CloudFront restituire una risposta al visualizzatore, indipendentemente dal fatto che la risposta provenga dalla CloudFront cache o dall'origine.

**Example Esempio**  
Il seguente pseudocodice mostra la struttura di una funzione che modifica la risposta 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;
}
```
La funzione restituisce l'`response`oggetto modificato a CloudFront, che ritorna CloudFront immediatamente al visualizzatore.

## Convalida le connessioni MTL in un tipo di evento di richiesta di connessione
<a name="function-code-connection-request"></a>

Le funzioni di connessione sono un tipo di CloudFront funzioni che vengono eseguite durante le connessioni TLS per fornire una logica di convalida e autenticazione personalizzata. Le funzioni di connessione sono attualmente disponibili per le connessioni TLS reciproche (MTLS), in cui è possibile convalidare i certificati client e implementare una logica di autenticazione personalizzata oltre alla convalida dei certificati standard. Le funzioni di connessione vengono eseguite durante il processo di handshake TLS e possono consentire o negare le connessioni in base alle proprietà del certificato, agli indirizzi IP dei client o ad altri criteri.

Dopo aver creato e pubblicato una funzione di connessione, assicuratevi di aggiungere un'associazione per il tipo di evento di *richiesta di connessione* con una distribuzione abilitata per MTLS. In questo modo la funzione viene eseguita ogni volta che un client tenta di stabilire una connessione MTLS con. CloudFront

**Example**  
Il seguente pseudocodice mostra la struttura di una funzione di connessione:  

```
function connectionHandler(connection) {
    // Validate certificate and connection properties here.
    
    if (/* validation passes */) {
        connection.allow();
    } else {
        connection.deny();
    }
}
```
La funzione utilizza metodi di supporto per determinare se consentire o negare la connessione. A differenza delle funzioni di richiesta e risposta del visualizzatore, le funzioni di connessione non possono modificare le richieste o le risposte HTTP.

## Informazioni correlate
<a name="related-information-cloudfront-functions-purpose"></a>

Per ulteriori informazioni sull'utilizzo CloudFront delle funzioni, consultate i seguenti argomenti:
+ [Struttura degli eventi](functions-event-structure.md)
+ [JavaScript funzionalità di runtime](functions-javascript-runtime-features.md)
+ [CloudFront Esempi di funzioni ](service_code_examples_cloudfront_functions_examples.md)
+ [Restrizioni sulle funzioni edge](edge-functions-restrictions.md)