Anda melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 400 Bad Request dengan kode error
protocol.http.DuplicateHeader sebagai respons untuk panggilan API.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 400 Bad Request
Selain itu, Anda mungkin melihat pesan error yang mirip dengan yang ditampilkan di bawah:
{
"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 permintaan HTTP yang dikirim oleh klien 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 dikenal. Jika Apigee Edge menemukan header tertentu, yang tidak diizinkan memiliki
duplikat, lebih dari sekali dalam permintaan HTTP yang dikirim oleh klien, maka Apigee Edge akan merespons dengan 400 Bad Request dan kode error
protocol.http.DuplicateHeader.
Berikut kemungkinan penyebab error ini:
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Header duplikat dalam permintaan | Permintaan HTTP dari aplikasi klien ke Apigee 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 ini.

- Buka halaman Analyze > API Monitoring > Investigate.
- Pilih jangka waktu tertentu saat Anda mengamati error.
- Pastikan filter Proxy ditetapkan ke All.
- Buat grafik Fault Code terhadap Time.
Pilih sel yang memiliki kode kesalahan
protocol.http.DuplicateHeaderseperti yang ditunjukkan di bawah:
Informasi tentang kode kesalahan
protocol.http.DuplicateHeaderditampilkan seperti yang ditunjukkan di bawah:
- Klik View logs dan luaskan baris untuk permintaan yang gagal.
- Dari jendela Logs, catat detail berikut:
- Status Code:
400 - Fault Source:
apigee - Fault Code:
protocol.http.DuplicateHeader.
- Status Code:
- Jika Fault Source memiliki nilai
apigeeatauMPdan Fault Code memiliki nilaiprotocol.http.DuplicateHeader, hal ini menunjukkan bahwa permintaan HTTP dari klien berisi header duplikat.
Alat pelacakan
NGINX
Untuk mendiagnosis error menggunakan log akses NGINX:
- Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk menentukan
informasi kunci tentang error HTTP
400. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDengan: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Cari untuk melihat apakah ada error
400selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan400. Jika Anda menemukan error
400dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.DuplicateHeader, tentukan nilai X-Apigee-fault-source.Contoh error 400 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 MP
Penyebab: Header Duplikat dalam permintaan
Diagnosis
- Tentukan Fault Code dan Fault Source untuk error yang diamati menggunakan Pemantauan API atau log akses NGINX seperti yang dijelaskan di Langkah-langkah diagnosis umum.
- Jika Fault Source memiliki nilai
apigeeatauMP, hal ini menunjukkan bahwa permintaan yang dikirim oleh aplikasi klien ke Apigee berisi header duplikat. Anda dapat menentukan header sebenarnya yang dikirim lebih dari sekali sebagai bagian dari permintaan menggunakan salah satu metode berikut:
Pesan error
Menggunakan pesan error
Jika Anda memiliki akses ke pesan error lengkap yang diterima dari Apigee Edge, maka lihat
faultstring. Thefaultstringberisi 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 memiliki akses ke permintaan sebenarnya yang dibuat oleh aplikasi klien, maka lakukan langkah-langkah berikut:
- Verifikasi daftar header yang diteruskan dalam permintaan.
- Jika Anda menemukan bahwa header tertentu muncul lebih dari sekali dalam permintaan dengan nilai yang sama atau nilai yang berbeda , itulah penyebab error ini.
Contoh permintaan:
curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
Dalam contoh permintaan di atas, header
Expiresdikirim lebih dari sekali. Oleh karena itu, permintaan ini gagal dengan error400 Bad Requestdan kode error:protocol.http.DuplicateHeader.- Atau, jika Anda memiliki akses ke log klien, Anda dapat melihat apakah Anda memiliki informasi tentang permintaan sebenarnya yang dibuat ke Apigee Edge dan menentukan header yang dikirim lebih dari sekali.
Resolusi
Memperbaiki duplikasi
Opsi #1 [Opsi yang Direkomendasikan] Memperbaiki aplikasi klien agar tidak menyertakan header duplikat
- Analisis alasan klien tertentu mengirim header duplikat. Misalnya,
Expiresdalam kasus di atas. Pastikan proxy API dapat menerima header duplikat. Biasanya, hal ini tidak diinginkan sesuai dengan spesifikasi HTTP RFC7230. - Jika tidak diinginkan, ubah aplikasi klien Anda agar tidak mengirim header duplikat.
Dalam contoh yang dibahas di atas, diketahui bahwa header
Expiresdikirim dua kali dengan nilai yang sama, yang tidak diinginkan. Anda dapat memperbaiki masalah ini dengan meneruskan headerExpireshanya sekali seperti yang ditunjukkan di bawah:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- 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 Message Processor 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 menampilkan error
400 Bad Request, meskipun permintaan berisi header duplikat menggunakan panduan cara Mengonfigurasi Message Processor untuk menggunakan header duplikat. - Jika Anda adalah pengguna Public Cloud, hubungi Dukungan Apigee Edge untuk mengonfigurasi properti ini untuk organisasi Anda.
Spesifikasi
Apigee mengharapkan aplikasi klien untuk tidak mengirim header duplikat sebagai bagian dari permintaan sesuai dengan spesifikasi RFC berikut:
| Spesifikasi |
|---|
| RFC 7230, bagian 3.2.2: Field Order |
| RFC 7230, bagian 3.2 Header Fields |
Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Mengumpulkan informasi diagnostik.
Mengumpulkan informasi diagnostik
Kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge.
Jika Anda adalah pengguna Public Cloud, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama API Proxy
- Perintah
curllengkap yang digunakan untuk mereproduksi error400 - File pelacakan 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
- Perintah
curllengkap yang Anda gunakan untuk mereproduksi error400 - File pelacakan untuk permintaan API
Log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDengan: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Log sistem Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log