0Pricing
Go Academy · Lezione

Impostare timeout e intestazioni

Timeout del client, intestazioni personalizzate e token di autenticazione

Impostare timeout e intestazioni è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Timeout a livello di client

Imposti http.Client.Timeout per limitare il tempo totale della richiesta e della risposta. È il timeout più semplice da configurare.

client := &http.Client{Timeout: 10 * time.Second}

Timeout a livello di transport

Regoli con precisione i timeout per la creazione della connessione e per l'handshake TLS tramite http.Transport:

t := &http.Transport{
    DialContext: (&net.Dialer{
        Timeout:   5 * time.Second,
        KeepAlive: 30 * time.Second,
    }).DialContext,
    TLSHandshakeTimeout:   5 * time.Second,
    ResponseHeaderTimeout: 5 * time.Second,
}
client := &http.Client{Transport: t, Timeout: 30 * time.Second}

Timeout basato sul contesto

I timeout del contesto si applicano a ogni richiesta e si propagano alle chiamate successive. Annullano la richiesta quando viene raggiunta la scadenza.

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)

Impostare le intestazioni della richiesta

Aggiunga intestazioni a una richiesta con req.Header.Set (sostituisce) o req.Header.Add (aggiunge):

req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Accept", "application/json")
req.Header.Set("X-Request-ID", requestID)

Intestazioni comuni

Content-Type per i corpi delle richieste; Accept per il formato di risposta desiderato; Authorization per i token di autenticazione; User-Agent per identificare il client.

Leggere le intestazioni della risposta

Legga le intestazioni della risposta da resp.Header.Get(key):

contentType := resp.Header.Get("Content-Type")
retryAfter := resp.Header.Get("Retry-After")

Timeout delle connessioni inattive

Imposti IdleConnTimeout sul transport per chiudere le connessioni inattive, evitando che si accumulino quando il traffico diminuisce.

t.IdleConnTimeout = 90 * time.Second
t.MaxIdleConnsPerHost = 10

Configurazione TLS

Personalizzi TLS, ad esempio la versione minima e i certificati client, tramite tls.Config sul transport:

t.TLSClientConfig = &tls.Config{MinVersion: tls.VersionTLS12}

Rilevare gli errori di timeout

Distingua gli errori di timeout dagli errori di rete utilizzando errors.As:

var urlErr *url.Error
if errors.As(err, &urlErr) && urlErr.Timeout() {
    // handle timeout
}

Timeout per richiesta e del client

Client.Timeout si applica a ogni richiesta. Un timeout del contesto è specifico per la richiesta e può essere più breve del timeout del client. Entrambi vengono rispettati: prevale il più breve.

Disabilitare keep-alive

Imposti DisableKeepAlives: true sul transport per programmi di breve durata che aprono poche connessioni, evitando il sovraccarico del pool di connessioni.

Verifica rapida

Quando sono impostati sia http.Client.Timeout sia un timeout del contesto, quale dei due viene applicato?

Riepilogo: timeout e header

Punti chiave:

  • client.Timeout: timeout totale per richiesta
  • context.WithTimeout: timeout annullabile e propagato
  • req.Header.Set per gli header personalizzati
  • Transport per timeout dettagliati di TLS, dial e inattività

Domande Frequenti

La lezione «Impostare timeout e intestazioni» è gratuita?

Sì — il testo completo di «Impostare timeout e intestazioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «Impostare timeout e intestazioni»?

Timeout del client, intestazioni personalizzate e token di autenticazione Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Impostare timeout e intestazioni»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Effettuare richieste HTTP
  2. Impostare timeout e intestazioni
  3. Decodificare risposte JSON
  4. Gestione degli errori e logica dei tentativi
← Torna a Go Academy