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à.
Personalizzazione del client HTTP
AWS SDK per Go Utilizza un client HTTP predefinito con valori di configurazione predefiniti. Sebbene sia possibile modificare alcuni di questi valori di configurazione, il client e il trasporto HTTP predefiniti non sono sufficientemente configurati per i clienti che li utilizzano AWS SDK per Go in un ambiente con requisiti di velocità effettiva elevata e bassa latenza. Per ulteriori informazioni, consulta la sezione in Domande frequenti quanto i consigli di configurazione variano in base a carichi di lavoro specifici. Questa sezione descrive come configurare un client HTTP personalizzato e utilizzarlo per creare AWS SDK per Go chiamate.
Per facilitare la creazione di un client HTTP personalizzato, questa sezione descrive come NewBuildableClient
Definiamo cosa vogliamo personalizzare.
Sovrascrivere durante il caricamento della configurazione
È possibile fornire client HTTP personalizzati durante la chiamata LoadDefaultConfigLoadDefaultConfig
Ad esempio, per passare customClient
come nostro cliente:
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithHTTPClient(customClient))
Timeout
BuildableHTTPClient
Può essere configurato con un limite di timeout della richiesta. Questo timeout include il tempo necessario per la connessione, l'elaborazione di eventuali reindirizzamenti e la lettura del corpo completo della risposta. Ad esempio, per modificare il timeout del client:
import "github.com/aws/aws-sdk-go-v2/aws/transport/http" // ... httpClient := http.NewBuildableClient().WithTimeout(time.Second*5)
Dialer
BuildableHTTPClient
Fornisce una meccanica di costruzione per la creazione di client con opzioni Dialer modificate.Dialer
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net" // ... httpClient := awshttp.NewBuildableClient().WithDialerOptions(func(d *net.Dialer) { d.KeepAlive = -1 d.Timeout = time.Millisecond*500 })
Impostazioni
Dialer. KeepAlive
Questa impostazione rappresenta il periodo di mantenimento per una connessione di rete attiva.
Imposta su un valore negativo per disabilitare i keep-alive.
Imposta su 0 per abilitare i keep-alive se supportati dal protocollo e dal sistema operativo.
I protocolli di rete o i sistemi operativi che non supportano i keep-alive ignorano questo campo. Per impostazione predefinita, TCP abilita keep alive.
Vedi https://golang. org/pkg/net/#Dialer. KeepAlive
Imposta KeepAlive
come Time.Duration.
Dialer.Timeout
Questa impostazione rappresenta il tempo massimo di attesa di una chiamata per la creazione di una connessione.
L'impostazione predefinita è 30 secondi.
Vedi https://golang. org/pkg/net/#Dialer .Timeout
Imposta Timeout
come time.Duration.
Trasporto
BuildableHTTPClient
Fornisce una meccanica di costruzione per la costruzione di client con opzioni di trasporto modificate.
Configurazione di un proxy
Se non riesci a connetterti direttamente a Internet, puoi utilizzare le variabili di ambiente supportate da Go (HTTP_PROXY
/HTTPS_PROXY
) o creare un client HTTP personalizzato per configurare il proxy. L'esempio seguente configura il client da utilizzare PROXY_URL
come endpoint proxy:
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net/http" // ... httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) { proxyURL, err := url.Parse("PROXY_URL") if err != nil { log.Fatal(err) } tr.Proxy = http.ProxyURL(proxyURL) })
Altre impostazioni
Di seguito sono riportate alcune altre Transport
impostazioni che possono essere modificate per ottimizzare il client HTTP. Tutte le impostazioni aggiuntive non descritte qui sono disponibili nella documentazione del tipo di trasporto
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net/http" // ... httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) { tr.ExpectContinueTimeout = 0 tr.MaxIdleConns = 10 })
Trasporto. ExpectContinueTimeout
Se la richiesta ha un'intestazione «Expect: 100-continue», questa impostazione rappresenta il tempo massimo di attesa per le intestazioni della prima risposta di un server dopo aver scritto completamente le intestazioni della richiesta. Questo tempo non include il tempo necessario per inviare l'intestazione della richiesta. Il client HTTP invia il suo payload dopo che questo timeout è scaduto.
Impostazione predefinita: 1 secondo.
Imposta su 0 per non richiedere alcun timeout e invia il payload della richiesta senza attese. Un caso d'uso è quando si verificano problemi con proxy o servizi di terze parti che richiedono una sessione simile all'uso di Amazon S3 nella funzione mostrata più avanti.
Vedi https://golang. org/pkg/net/http/#Transport. ExpectContinueTimeout
Imposta ExpectContinue
come Time.Duration.
Trasporto. IdleConnTimeout
Questa impostazione rappresenta la quantità massima di tempo per mantenere attiva una connessione di rete inattiva tra le richieste HTTP.
Imposta su 0 per non avere limiti.
Vedi https://golang. org/pkg/net/http/#Transport. IdleConnTimeout
Imposta IdleConnTimeout
come Time.Duration.
Trasporto. MaxIdleConns
Questa impostazione rappresenta il numero massimo di connessioni inattive (keep-alive) su tutti gli host. Un caso d'uso per aumentare questo valore è quando si vedono molte connessioni in un breve periodo dagli stessi client
0 significa nessun limite.
Vedi https://golang. org/pkg/net/http/#Transport. MaxIdleConns
Imposta MaxIdleConns
come int.
Trasporto. MaxIdleConnsPerHost
Questa impostazione rappresenta il numero massimo di connessioni inattive (keep-alive) da mantenere per host. Un caso d'uso per aumentare questo valore è quando si vedono molte connessioni in un breve periodo dagli stessi client
L'impostazione predefinita è di due connessioni inattive per host.
Imposta su 0 per utilizzare DefaultMaxIdleConnsPerHost (2).
Vedi https://golang. org/pkg/net/http/#Transport. MaxIdleConnsPerHost
Imposta MaxIdleConnsPerHost
come int.
Trasporto. ResponseHeaderTimeout
Questa impostazione rappresenta il tempo massimo di attesa che un client legga l'intestazione della risposta.
Se il client non è in grado di leggere l'intestazione della risposta entro questo periodo, la richiesta ha esito negativo e viene generato un errore di timeout.
Fai attenzione a impostare questo valore quando usi funzioni Lambda a esecuzione prolungata, poiché l'operazione non restituisce alcuna intestazione di risposta fino al termine o al timeout della funzione Lambda. Tuttavia, è ancora possibile utilizzare questa opzione con l'operazione API** **. InvokeAsync
L'impostazione predefinita è nessun timeout; attendi per sempre.
Vedi https://golang. org/pkg/net/http/#Transport. ResponseHeaderTimeout
Imposta ResponseHeaderTimeout
come Time.Duration.
Trasporto. TLSHandshakeTimeout
Questa impostazione rappresenta il tempo massimo di attesa per il completamento di un handshake TLS.
Il valore predefinito è 10 secondi.
Zero significa nessun timeout.
Vedi https://golang. org/pkg/net/http/#Transport. TLSHandshakeTimeout
Imposta TLSHandshakeTimeout
come Time.Duration.