Anda sedang 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 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 permintaan HTTP yang dikirim oleh klien ke Apigee Edge.
Sesuai dengan
RFC 7230, bagian 3.2.2: Urutan Kolom, pengirim TIDAK HARUS menghasilkan beberapa header
kolom dengan nama kolom yang sama dalam pesan, kecuali jika seluruh nilai kolom untuk pesan tersebut
bidang header didefinisikan sebagai daftar yang dipisahkan koma, [yaitu, #(values)] atau kolom header adalah
pengecualian yang umum digunakan. Jika Apigee Edge menemukan header tertentu, Anda tidak diperbolehkan memiliki
duplikasi, lebih dari sekali dalam permintaan HTTP yang dikirim oleh klien, maka
merespons dengan 400 Bad Request
dan kode error
protocol.http.DuplicateHeader
.
Berikut adalah kemungkinan penyebab error ini:
Penyebab | Deskripsi | Petunjuk pemecahan masalah 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.
Beralihlah ke organisasi tempat Anda ingin menyelidiki masalah tersebut.
- Buka Analyze > Pemantauan API > Investigasi.
- Pilih jangka waktu tertentu saat Anda melihat error.
- Pastikan filter Proxy ditetapkan ke Semua.
- Gambarkan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode kesalahan
protocol.http.DuplicateHeader
sebagaimana ditunjukkan di bawah ini:Informasi tentang kode kesalahan
protocol.http.DuplicateHeader
adalah ditampilkan seperti yang ditunjukkan di bawah ini:- Klik View logs, lalu luaskan baris untuk permintaan yang gagal.
- Dari jendela Logs, perhatikan detail berikut:
- Kode Status:
400
- Sumber Kesalahan:
apigee
- Kode Kesalahan:
protocol.http.DuplicateHeader
.
- Kode Status:
- Jika Sumber Kesalahan memiliki nilai
apigee
atauMP
dan Kode Kesalahan memiliki nilaiprotocol.http.DuplicateHeader
, yang menunjukkan bahwa permintaan HTTP dari klien itu berisi {i> header<i} duplikat.
Alat rekaman aktivitas
NGINX
Untuk mendiagnosis error menggunakan log akses NGINX:
- Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk menentukan
informasi penting tentang error
400
HTTP. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Di mana: ORG, ENV, dan PORT# diganti dengan nilai aktual.
- Telusuri untuk mengetahui apakah terdapat error
400
selama durasi tertentu (jika terjadi di masa lalu) atau jika ada permintaan yang masih gagal dengan400
. Jika Anda menemukan error
400
dengan X-Apigee-fault-code cocok dengan nilaiprotocol.http.DuplicateHeader
, lalu tentukan nilai X-Apigee-fault-source.Contoh error 400 dari log akses NGINX:
Contoh entri di atas dari log NGINX Access memiliki nilai berikut untuk X-Apigee- fault-code dan X-Apigee-fault-source:
Header Respons Nilai X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source MP
Penyebab: Header Duplikat dalam permintaan
Diagnosis
- Tentukan Kode Kesalahan dan Sumber Kesalahan untuk error yang diamati menggunakan API Log akses pemantauan atau NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
- Jika Sumber Kesalahan memiliki nilai
apigee
atauMP
, menunjukkan bahwa permintaan yang dikirim oleh aplikasi klien ke Apigee berisi duplikat {i>header<i}. 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, lihat
faultstring
.faultstring
berisi bagian yang telah dikirim lebih dari sekali.Contoh pesan error:
"faultstring":"Duplicate Header \"Expires\""
- Dalam pesan error di atas, Anda dapat melihat bahwa header
Expires
dikirim lebih dari sekali seperti yang terlihat dalamfaultstring
.
Permintaan sebenarnya
Menggunakan permintaan yang sebenarnya
Jika Anda memiliki akses ke permintaan aktual yang dibuat oleh aplikasi klien, maka lakukan langkah-langkah berikut:
- Verifikasi daftar header yang diteruskan dalam permintaan.
- Jika Anda menemukan bahwa {i>header<i} tertentu muncul lebih dari sekali di dengan nilai yang sama atau nilai yang berbeda , maka itulah penyebabnya untuk pesan {i>error<i} 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
Expires
dikirim lebih dari sekali. Oleh karena itu, permintaan ini gagal dengan error400 Bad Request
dan kode error:protocol.http.DuplicateHeader
.- Atau, jika Anda memiliki akses ke log klien, Anda dapat melihat apakah Anda memiliki tentang permintaan aktual 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
- Menganalisis alasan klien tertentu mengirim header duplikat. Misalnya,
Expires
dalam kasus di atas. Verifikasi bahwa proxy API dapat menerima {i>header <i}duplikat. Biasanya, tidak diinginkan sesuai spesifikasi HTTP RFC7230. - Jika tidak diinginkan, ubah aplikasi klien Anda agar tidak mengirimkan header duplikat.
Pada contoh yang dibahas di atas, terlihat bahwa header
Expires
dikirim dua kali dengan nilai yang sama, yang tidak diinginkan. Anda dapat memperbaiki masalah ini dengan meneruskanExpires
hanya sekali seperti yang ditunjukkan di bawah ini:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- Jika Anda menginginkannya dan Anda ingin mengizinkan header duplikat, buka Opsi #2 Menggunakan properti CwC.
CwC
Opsi no. 2 Menggunakan properti CwC
Apigee menyediakan
CwC properti HTTPHeader.<HeaderName>
,yang memungkinkan klien
aplikasi dan server target untuk mengirimkan header duplikat ke proxy API di Apigee Edge.
Properti CwC | Nilai |
---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Misalnya, properti berikut bisa disetel di Pemroses Pesan untuk mengizinkan duplikasi dan
beberapa nilai untuk header Expires
.
HTTPHeader.Expires=allowDuplicates, multiValued
- Jika Anda adalah pengguna Private Cloud, Anda dapat mengonfigurasi properti untuk mencegah
Apigee Edge agar tidak menampilkan error
400 Bad Request
, meskipun permintaannya berisi header duplikat menggunakan Panduan cara mengonfigurasi Pemroses Pesan agar menggunakan header duplikat. - Jika Anda adalah pengguna Cloud Publik, hubungi Dukungan Apigee Edge untuk mengonfigurasi properti ini untuk organisasi Anda.
Spesifikasi
Apigee mengharapkan aplikasi klien tidak mengirim header duplikat sebagai bagian dari permintaan 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 Harus 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
- Menyelesaikan perintah
curl
yang digunakan untuk mereproduksi error400
- 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
- Menyelesaikan perintah
curl
yang Anda gunakan untuk mereproduksi error400
- File rekaman aktivitas untuk permintaan API
Log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Di mana: ORG, ENV, dan PORT# diganti dengan nilai aktual.
- Log sistem Pemroses Pesan
/opt/apigee/var/log/edge-message-processor/logs/system.log