

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Sesuaikan Klien HTTP
<a name="configure-http"></a>

 AWS SDK untuk Go Menggunakan klien HTTP default dengan nilai konfigurasi default. Meskipun Anda dapat mengubah beberapa nilai konfigurasi ini, klien HTTP default dan transport tidak cukup dikonfigurasi untuk pelanggan yang menggunakan AWS SDK untuk Go dalam lingkungan dengan throughput tinggi dan persyaratan latensi rendah. Untuk informasi lebih lanjut, silakan lihat rekomendasi konfigurasi [Pertanyaan yang Sering Diajukan](faq-gosdk.md) as bervariasi berdasarkan beban kerja tertentu. Bagian ini menjelaskan cara mengkonfigurasi klien HTTP kustom, dan menggunakan klien tersebut untuk membuat AWS SDK untuk Go panggilan. 

 Untuk membantu Anda dalam membuat klien HTTP kustom, bagian ini menjelaskan cara [NewBuildableClient](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/transport/http#NewBuildableClient)untuk mengkonfigurasi pengaturan kustom, dan menggunakan klien itu dengan klien AWS SDK untuk Go layanan. 

 Mari kita definisikan apa yang ingin kita sesuaikan. 

## Mengganti Selama Pemuatan Konfigurasi
<a name="overriding-during-configuration-loading"></a>

 Klien HTTP kustom dapat diberikan saat memanggil [LoadDefaultConfig](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/config#LoadDefaultConfig)dengan membungkus klien menggunakan [With HTTPClient](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/config#WithHTTP) dan meneruskan nilai yang dihasilkan ke`LoadDefaultConfig`. Misalnya, untuk lulus `customClient` sebagai klien kami: 

```
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithHTTPClient(customClient))
```

## Waktu habis
<a name="timeout"></a>

 `BuildableHTTPClient`Dapat dikonfigurasi dengan batas waktu tunggu permintaan. Batas waktu ini mencakup waktu untuk terhubung, memproses pengalihan apa pun, dan membaca badan respons lengkap. Misalnya, untuk memodifikasi batas waktu klien: 

```
import "github.com/aws/aws-sdk-go-v2/aws/transport/http"

// ...

httpClient := http.NewBuildableClient().WithTimeout(time.Second*5)
```

## Dialer
<a name="dialer"></a>

 `BuildableHTTPClient`Ini menyediakan mekanisme pembangun untuk membangun klien dengan opsi [Dialer](https://golang.org/pkg/net/#Dialer) yang dimodifikasi. Contoh berikut menunjukkan cara mengkonfigurasi `Dialer` pengaturan klien. 

```
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
})
```

### Pengaturan
<a name="settings"></a>

#### Dialer. KeepAlive
<a name="dialerkeepalive"></a>

 Pengaturan ini mewakili periode keep-alive untuk koneksi jaringan aktif. 

 Setel ke nilai negatif untuk menonaktifkan keep-alives. 

 Setel ke **0** untuk mengaktifkan keep-alives jika didukung oleh protokol dan sistem operasi. 

 Protokol jaringan atau sistem operasi yang tidak mendukung keep-alives mengabaikan bidang ini. Secara default, TCP memungkinkan tetap hidup. 

 Lihat [https://golang. org/pkg/net/\$1Dialer. KeepAlive](https://golang.org/pkg/net/#Dialer.KeepAlive) 

 Tetapkan `KeepAlive` sebagai **time.Duration.** 

#### Dialer.Timeout
<a name="dialertimeout"></a>

 Pengaturan ini mewakili jumlah maksimum waktu dial menunggu koneksi dibuat. 

 Defaultnya adalah 30 detik. 

 Lihat [https://golang. org/pkg/net/\$1Dialer .Timeout](https://golang.org/pkg/net/#Dialer.Timeout) 

 Tetapkan `Timeout` sebagai **time.Duration.** 

## Transportasi
<a name="transport"></a>

 `BuildableHTTPClient`Ini menyediakan mekanisme pembangun untuk membangun klien dengan opsi [Transportasi](https://golang.org/pkg/net/http#Transport) yang dimodifikasi. 

### Mengkonfigurasi Proxy
<a name="configuring-a-proxy"></a>

 Jika Anda tidak dapat langsung terhubung ke internet, Anda dapat menggunakan variabel lingkungan yang didukung GO (`HTTP_PROXY`/`HTTPS_PROXY`) atau membuat klien HTTP khusus untuk mengonfigurasi proxy Anda. Contoh berikut mengonfigurasi klien untuk digunakan `PROXY_URL` sebagai titik akhir 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)
})
```

### Pengaturan Lainnya
<a name="other-settings"></a>

 Di bawah ini adalah beberapa `Transport` pengaturan lain yang dapat dimodifikasi untuk menyetel klien HTTP. Pengaturan tambahan apa pun yang tidak dijelaskan di sini dapat ditemukan di dokumentasi tipe [Transport](https://golang.org/pkg/net/http/#Transport). Pengaturan ini dapat diterapkan seperti yang ditunjukkan pada contoh berikut: 

```
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
})
```

#### Transportasi. ExpectContinueTimeout
<a name="transportexpectcontinuetimeout"></a>

 Jika permintaan memiliki header “Expect: 100-continue”, pengaturan ini mewakili jumlah waktu maksimum untuk menunggu header respons pertama server setelah sepenuhnya menulis header permintaan, Kali ini tidak termasuk waktu untuk mengirim header permintaan. Klien HTTP mengirimkan payloadnya setelah batas waktu ini habis. 

 Default 1 detik. 

 Setel ke **0** tanpa batas waktu dan kirim payload permintaan tanpa menunggu. Salah satu kasus penggunaan adalah ketika Anda mengalami masalah dengan proxy atau layanan pihak ketiga yang mengambil sesi yang mirip dengan penggunaan Amazon S3 dalam fungsi yang ditampilkan nanti. 

 Lihat [https://golang. org/pkg/net/http/\$1Transport. ExpectContinueTimeout](https://golang.org/pkg/net/http/#Transport.ExpectContinueTimeout) 

 Tetapkan `ExpectContinue` sebagai **time.Duration.** 

#### Transportasi. IdleConnTimeout
<a name="transportidleconntimeout"></a>

 Pengaturan ini mewakili jumlah maksimum waktu untuk menjaga koneksi jaringan idle tetap hidup antara permintaan HTTP. 

 Setel ke **0** tanpa batas. 

 Lihat [https://golang. org/pkg/net/http/\$1Transport. IdleConnTimeout](https://golang.org/pkg/net/http/#Transport.IdleConnTimeout) 

 Tetapkan `IdleConnTimeout` sebagai **time.Duration.** 

#### Transportasi. MaxIdleConns
<a name="transportmaxidleconns"></a>

 Pengaturan ini mewakili jumlah maksimum koneksi idle (keep-alive) di semua host. Salah satu kasus penggunaan untuk meningkatkan nilai ini adalah ketika Anda melihat banyak koneksi dalam waktu singkat dari klien yang sama 

 **0** berarti tidak ada batas. 

 Lihat [https://golang. org/pkg/net/http/\$1Transport. MaxIdleConns](https://golang.org/pkg/net/http/#Transport.MaxIdleConns) 

 Tetapkan `MaxIdleConns` sebagai **int**. 

#### Transportasi. MaxIdleConnsPerHost
<a name="transportmaxidleconnsperhost"></a>

 Pengaturan ini mewakili jumlah maksimum koneksi idle (keep-alive) untuk disimpan per host. Salah satu kasus penggunaan untuk meningkatkan nilai ini adalah ketika Anda melihat banyak koneksi dalam waktu singkat dari klien yang sama 

 Default adalah dua koneksi idle per host. 

 Setel ke **0** untuk menggunakan DefaultMaxIdleConnsPerHost (2). 

 Lihat [https://golang. org/pkg/net/http/\$1Transport. MaxIdleConnsPerHost](https://golang.org/pkg/net/http/#Transport.MaxIdleConnsPerHost) 

 Tetapkan `MaxIdleConnsPerHost` sebagai **int**. 

#### Transportasi. ResponseHeaderTimeout
<a name="transportresponseheadertimeout"></a>

 Pengaturan ini mewakili jumlah waktu maksimum untuk menunggu klien membaca header respons. 

 Jika klien tidak dapat membaca header respons dalam durasi ini, permintaan gagal dengan kesalahan batas waktu. 

 Hati-hati menyetel nilai ini saat menggunakan fungsi Lambda yang berjalan lama, karena operasi tidak mengembalikan header respons apa pun hingga fungsi Lambda selesai atau habis waktu. Namun, Anda masih dapat menggunakan opsi ini dengan operasi API InvokeAsync \$1\$1 \$1\$1. 

 Default adalah tidak ada batas waktu; tunggu selamanya. 

 Lihat [https://golang. org/pkg/net/http/\$1Transport. ResponseHeaderTimeout](https://golang.org/pkg/net/http/#Transport.ResponseHeaderTimeout) 

 Tetapkan `ResponseHeaderTimeout` sebagai **time.Duration.** 

#### Transportasi. TLSHandshakeBatas waktu
<a name="transporttlshandshaketimeout"></a>

 Pengaturan ini mewakili jumlah waktu maksimum menunggu jabat tangan TLS selesai. 

 Default-nya 10 detik. 

 Nol berarti tidak ada batas waktu. 

 Lihat [https://golang. org/pkg/net/http/\$1Transport. TLSHandshakeBatas waktu](https://golang.org/pkg/net/http/#Transport.TLSHandshakeTimeout) 

 Tetapkan `TLSHandshakeTimeout` sebagai **time.Duration.** 