Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 502 Bad Gateway dengan kode error
protocol.http.DuplicateHeader sebagai respons untuk panggilan API.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 502 Bad Gateway
Selain itu, Anda mungkin melihat pesan error yang mirip dengan yang ditunjukkan di bawah ini:
{
"fault":{
"faultstring":"Duplicate Header \"Expires\"",
"detail":{
"errorcode":"protocol.http.DuplicateHeader"
}
}
}Kemungkinan Penyebab
Error ini terjadi jika header HTTP tertentu yang tidak diizinkan memiliki duplikat di Apigee Edge, muncul lebih dari sekali dengan nilai yang sama atau berbeda, sebagai bagian dari respons HTTP yang dikirim oleh server backend ke Apigee Edge.
Sesuai dengan
RFC 7230, bagian 3.2.2: Field Order, pengirim TIDAK BOLEH membuat beberapa kolom
header dengan nama kolom yang sama dalam pesan kecuali jika seluruh nilai kolom untuk kolom
header tersebut ditentukan sebagai daftar yang dipisahkan koma, [yaitu, #(values)] atau kolom header adalah
pengecualian yang sudah dikenal. Jika Apigee Edge menemukan bahwa header yang sama tertentu, yang tidak diizinkan untuk
memiliki duplikat, dikirim lebih dari sekali dalam respons HTTP yang dikirim oleh
server target/backend,
maka Apigee Edge akan merespons dengan 502 Bad Gateway dan kode error
protocol.http.DuplicateHeader
Berikut kemungkinan penyebab error ini:
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Header duplikat dalam respons | Respons dari server backend berisi header duplikat. | Pengguna Edge Public dan Private Cloud |
Langkah-langkah diagnosis umum
Gunakan salah satu alat/teknik berikut untuk mendiagnosis error ini:
Pemantauan API
Untuk mendiagnosis error menggunakan Pemantauan API:
- Login ke UI Apigee Edge sebagai pengguna dengan peran yang sesuai.
Beralih ke organisasi tempat Anda ingin menyelidiki masalah.

- Buka halaman Analyze > API Monitoring > Investigate.
- Pilih jangka waktu tertentu saat Anda mengamati error.
- Pastikan filter Proxy disetel ke Semua.
- Petakan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode kesalahan
protocol.http.DuplicateHeaderseperti yang ditunjukkan di bawah:(lihat gambar yang lebih besar)

Informasi tentang kode kesalahan
protocol.http.DuplicateHeaderditampilkan seperti yang ditunjukkan di bawah:(lihat gambar yang lebih besar)

- Pastikan Status Code adalah
502seperti yang ditunjukkan dalam contoh di atas. - Klik Lihat log dan luaskan baris untuk permintaan yang gagal.
Dari jendela Logs, perhatikan detail berikut:
- Kode Status:
502 - Sumber Kesalahan:
target - Kode Kesalahan:
protocol.http.DuplicateHeader.
- Kode Status:
- Fault Source adalah
target, yang menunjukkan bahwa respons dari server backend berisi header duplikat.
Alat rekaman aktivitas
Untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan sesi rekaman aktivitas dan salah satu dari
- Tunggu hingga terjadi error
502 Bad Gatewayatau - Jika Anda dapat mereproduksi masalah, lakukan panggilan API dan reproduksi error
502 Bad Gateway
- Tunggu hingga terjadi error
Pastikan Show all Flow Infos diaktifkan:

- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitas.
- Telusuri berbagai fase rekaman aktivitas dan temukan tempat terjadinya kegagalan.
Anda biasanya akan menemukan error dalam alur setelah fase Permintaan dikirim ke server target seperti yang ditunjukkan di bawah:
(lihat gambar yang lebih besar)

Perhatikan nilai error dari rekaman aktivitas.
Contoh rekaman aktivitas di atas menunjukkan error sebagai
Duplicate Header "Expires". Karena error dimunculkan oleh Apigee setelah permintaan dikirim ke server backend, hal ini menunjukkan bahwa server backend mengirimkan headerExpireslebih dari sekali.- Buka Fase AX (Data Analytics Direkam) dalam rekaman aktivitas, lalu klik.
Scroll ke bawah ke bagian Phase Details - Response Headers dan tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan di bawah:
(lihat gambar yang lebih besar)

- Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source
sebagai
protocol.http.DuplicateHeaderdantarget, yang menunjukkan bahwa error ini disebabkan karena header duplikat diteruskan oleh server backend untuk header responsExpires.Header Respons Nilai X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source target Periksa apakah Anda menggunakan proxy chaining; yaitu, apakah server target atau endpoint target memanggil proxy lain di Apigee.
Untuk menentukannya, kembali ke fase server Permintaan dikirim ke target. Klik Show Curl.
Jendela Curl for Request Sent to Target Server akan terbuka dan Anda dapat menentukan alias host server target.
- Jika alias host server target mengarah ke alias host virtual, maka itu adalah proxy
chaining. Dalam hal ini, Anda harus mengulangi semua langkah di atas untuk proxy berantai hingga Anda menentukan apa yang sebenarnya menyebabkan error
502 Bad Gateway. - Jika alias host server target mengarah ke server backend Anda, berarti server backend Anda mengirim header duplikat dalam respons ke Apigee.
NGINX
Untuk mendiagnosis error menggunakan log akses NGINX:
- Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk
menentukan informasi utama tentang error HTTP
502. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logTempat: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Cari untuk melihat apakah ada error
502selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan502. Jika Anda menemukan error
502dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.DuplicateHeader, maka tentukan nilai X-Apigee-fault-source.Contoh error 502 dari log akses NGINX:
Entri contoh di atas dari log Akses NGINX memiliki nilai berikut untuk X- Apigee-fault-code dan X-Apigee-fault-source:
Header Respons Nilai X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source target
Penyebab: Header Duplikat dalam respons
Diagnosis
- Tentukan Kode Kesalahan dan Sumber Kesalahan untuk error yang diamati menggunakan API Monitoring atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
- Jika Fault Source memiliki nilai
target, berarti respons yang dikirim oleh server target berisi header duplikat. Anda dapat menentukan header sebenarnya yang dikirim lebih dari sekali sebagai bagian dari respons menggunakan salah satu metode berikut:
Pesan error
Menggunakan pesan error:
Jika Anda memiliki akses ke pesan error lengkap yang diterima dari Apigee Edge, lihat
faultstring.faultstringberisi nama header yang telah dikirim lebih dari sekali.Contoh pesan error:
"faultstring":"Duplicate Header \"Expires\""
- Dalam pesan error di atas, Anda dapat melihat bahwa header
Expiresdikirim lebih dari sekali seperti yang terlihat difaultstring.
Permintaan sebenarnya
Menggunakan permintaan sebenarnya:
- Jika Anda tidak memiliki akses ke permintaan sebenarnya yang dibuat ke server target, dapatkan
perintah
curlyang sesuai dari langkah 10.a dan langkah 10.b Menggunakan alat Perekaman Aktivitas. Jika Anda memiliki akses ke permintaan sebenarnya yang dibuat ke aplikasi server target, lakukan langkah-langkah berikut:
Lakukan panggilan ke server target.
Contoh Permintaan untuk server target yang digunakan dalam contoh ini:
curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
Verifikasi daftar header yang terlihat dalam respons.
Contoh Respons dari server target yang digunakan dalam contoh ini:
* ...Trimmed... > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2 > Host: BACKEND_SERVER_HOST > User-Agent: curl/7.64.1 > Accept: */* > * Connection state changed (MAX_CONCURRENT_STREAMS == 128)! < HTTP/2 200 < date: Fri, 02 Jul 2021 05:29:07 GMT < content-type: application/json < content-length: 166 < server: gunicorn/19.9.0 < Expires: Mon, 21 June 2021 07:28:00 GMT < Expires: Mon, 21 June 2021 07:28:00 GMT < access-control-allow-origin: * < access-control-allow-credentials: true < ----<Response BODY>------ * Connection #0 to host httpbin.org left intact * Closing connection 0
Dalam contoh permintaan di atas, header
Expiresdikirim lebih dari sekali. Oleh karena itu, permintaan ini gagal dengan error502 Bad Gatewaydan kode error:protocol.http.DuplicateHeader.Jika header yang namanya muncul di
faultstringmuncul lebih dari sekali dalam respons server backend, maka itulah penyebab error ini. Dalam kasus di atas, headerExpiresdikirim lebih dari sekali.
Resolusi
Memperbaiki duplikasi
Opsi #1 [Opsi yang Direkomendasikan] Perbaiki server backend agar tidak menyertakan header duplikat
- Analisis alasan server backend tertentu mengirim header duplikat
Expiresdan verifikasi apakah proxy API dapat menerimanya. Dalam sebagian besar kasus, hal ini tidak akan diinginkan sesuai dengan spesifikasi HTTP RFC7230. - Jika tidak diinginkan, ubah aplikasi server target Anda agar tidak mengirim header duplikat.
Dalam contoh yang dibahas di atas, terlihat bahwa header
Expiresdikirim dua kali dengan nilai yang sama, yang tidak diinginkan. Anda dapat memperbaiki masalah ini dengan memastikan bahwa server target meneruskan headerExpireshanya sekali. - Jika diinginkan dan Anda ingin mengizinkan header duplikat, buka Opsi #2 Menggunakan properti CwC.
CwC
Opsi #2 Menggunakan properti CwC
Apigee menyediakan properti CwC
HTTPHeader.<HeaderName> ,yang memungkinkan aplikasi klien dan server
target mengirim header duplikat ke proxy API di Apigee Edge.
| Properti CwC | Nilai |
|---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Misalnya, properti berikut dapat ditetapkan di Pemroses Pesan untuk mengizinkan duplikat
dan beberapa nilai untuk header Expires.
HTTPHeader.Expires=allowDuplicates, multiValued
- Jika Anda adalah pengguna Private Cloud, Anda dapat mengonfigurasi properti untuk mencegah Apigee
Edge memunculkan error
502 Bad Gateway, meskipun permintaan berisi header duplikat menggunakan Mengonfigurasi Pemroses Pesan untuk menggunakan header duplikat panduan cara melakukannya. - Jika Anda adalah pengguna Public Cloud, hubungi Dukungan Apigee Edge untuk mengonfigurasi properti ini bagi organisasi Anda.
Spesifikasi
Apigee merespons dengan respons error 502 Bad Gateway karena mengharapkan server backend berperilaku sesuai dengan spesifikasi RFC berikut:
| Spesifikasi |
|---|
| RFC 7230, bagian 3.2.2: Urutan Kolom |
| RFC 7230, bagian 3.2: Kolom Header |
Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Mengumpulkan informasi diagnostik.
Harus mengumpulkan informasi diagnostik
Kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge.
Jika Anda adalah pengguna Cloud Publik, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama Proxy API
- Perintah
curllengkap yang digunakan untuk memunculkan kembali error502 - File rekaman aktivitas untuk permintaan API
Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati untuk permintaan yang gagal
- Nama lingkungan
- Paket proxy API
- File rekaman aktivitas untuk permintaan API
Log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logTempat: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Log sistem Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log