Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Sesuai dengan Spesifikasi HTTP RFC 7230, bagian 3.2.2: Urutan Kolom, Apigee Edge memperkirakan bahwa permintaan HTTP dari klien atau respons HTTP dari server backend tidak berisi header yang sama yang diteruskan lebih dari sekali dengan nilai yang sama atau berbeda, kecuali jika header tertentu memiliki pengecualian dan diizinkan untuk memiliki duplikat.
Secara default, Apigee Edge memungkinkan duplikat dan beberapa nilai untuk diteruskan ke sebagian besar header HTTP. Namun, hal ini tidak mengizinkan header tertentu yang tercantum di Header yang tidak diizinkan memiliki duplikat dan beberapa nilai. Jadi:
- Anda akan mendapatkan
400 Bad Request
dengan kode errorprotocol.http.DuplicateHeader
jika klien mengirimkan permintaan HTTP dengan header tertentu lebih dari sekali, atau dengan beberapa nilai untuk header HTTP yang tidak diizinkan memiliki duplikat/beberapa nilai di Apigee Edge. - Demikian pula, Anda akan mendapatkan
502 Bad Gateway
dengan kode errorprotocol.http.DuplicateHeader
jika server backend mengirimkan respons HTTP dengan header tertentu lebih dari sekali, atau dengan beberapa nilai untuk header HTTP yang tidak diizinkan memiliki duplikat atau beberapa nilai di Apigee Edge
Solusi yang direkomendasikan untuk mengatasi error ini adalah dengan memperbaiki aplikasi klien dan server backend agar tidak mengirim header duplikat dan mematuhi spesifikasi RFC 7230, bagian 3.2.2: Field Order seperti yang dijelaskan dalam playbook pemecahan masalah berikut:
Namun, dalam beberapa kasus, Anda mungkin ingin menambahkan pengecualian untuk menyertakan duplikat dan beberapa
nilai untuk beberapa header HTTP. Dalam situasi semacam itu, Anda dapat mengizinkan header duplikat dan beberapa
nilai untuk header HTTP tertentu dengan menetapkan HTTPHeader.HEADER_NAME
properti pada
tingkat Pemroses Pesan.
Dokumen ini memberikan informasi tentang properti ini, menjelaskan cara mengaktifkan properti ini untuk menghindari error yang disebutkan di atas, dan membagikan praktik terbaik yang serupa.
Properti header HTTP untuk mengizinkan duplikat dan beberapa nilai
Apigee Edge menyediakan dua properti berikut untuk mengontrol perilaku yang mengizinkan duplikat dan beberapa nilai untuk header HTTP. Perhatikan bahwa hal ini hanya dapat dikonfigurasi pada Pemroses Pesan menggunakan sintaksis token yang dijelaskan dalam Cara mengonfigurasi Edge.
Nama properti | Deskripsi | Nilai diizinkan |
---|---|---|
HTTPHeader.ANY |
Properti ini menunjukkan apakah duplikat atau beberapa nilai diizinkan untuk semua header HTTP, termasuk header kustom yang dikirim sebagai bagian dari permintaan HTTP yang dibuat oleh klien, atau respons HTTP yang dikirim oleh server backend ke Apigee Edge. Nilai default:
|
|
|
Properti ini digunakan untuk mengganti perilaku header tertentu dari perilaku yang ditentukan oleh |
Sama seperti di atas. |
Header yang tidak diizinkan memiliki duplikat dan beberapa nilai
Seperti yang dijelaskan sebelumnya, Apigee Edge mengizinkan duplikat dan beberapa nilai untuk sebagian besar header HTTP secara default. Hal ini karena properti HTTPHeader.ANY
dikonfigurasi dengan nilai multivalued, allowDuplicate.
Konfigurasi ditimpa
Untuk beberapa header tertentu, konfigurasi default ditimpa menggunakan salah satu metode berikut:
HTTPHeader.HEADER_NAME=multivalued, allowDuplicate
Konfigurasi ini tidak mengubah perilaku default. Artinya, header tertentu diizinkan untuk memiliki duplikat dan beberapa nilai
.HTTPHeader.HEADER_NAME=
Konfigurasi ini mengubah perilaku default. Artinya, header tertentu tidak diizinkan memiliki duplikat dan beberapa nilai.
Menentukan header yang tidak diizinkan memiliki duplikat dan beberapa nilai
Bagian ini menjelaskan cara mengidentifikasi hal berikut:
- Header spesifik yang tidak diizinkan memiliki duplikat dan beberapa nilai di penyiapan Apigee Edge Private Cloud, dan
- Header spesifik dengan konfigurasi yang sudah ada sebelumnya
Pada mesin Message Processor, telusuri properti
HTTPHeader.
dalam direktori/opt/apigee/edge-message-processor/conf
seperti yang ditunjukkan di bawah ini:grep -ri "HTTPHeader." /opt/apigee/edge-message-processor/conf
Contoh output:
# grep -ri "HTTPHeader" /opt/apigee/edge-message-processor/conf /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.ANY=allowDuplicates, multiValued /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Connection=allowDuplicates, multiValued … <snipped> /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Host= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Date=allowDuplicates … <snipped>
- Seperti yang dijelaskan di bagian Konfigurasi ditimpa,
perhatikan informasi berikut dalam contoh output di atas:
- Header HTTP
Connection
ditimpa, tetapi boleh memiliki duplikat dan beberapa nilai - Header HTTP
Host
danExpires
akan ditimpa dan tidak diizinkan memiliki duplikat dan beberapa nilai - Header HTTP
Date
ditimpa dan diizinkan memiliki duplikat, tetapi tidak diizinkan untuk memiliki beberapa nilai - Semua header yang muncul di sini (
Connection
,Host
,Expires
, danDate
dalam contoh di atas) disebut sebagai header dengan konfigurasi yang sudah ada sebelumnya dalam dokumen ini.
- Header HTTP
Perilaku Apigee Edge
Tabel berikut menjelaskan perilaku Apigee Edge saat header dikirim sebagai duplikat dan dengan beberapa nilai, bergantung pada cara properti HTTPHeader
dikonfigurasi pada Pemroses Pesan dengan contoh HTTPHeader
dari test-header
.
Permintaan | Klausul keluar berdasarkan nilai conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<Kosong> | allowDuplicate | multiValued | allowDuplicate, multiValued (DEFAULT) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Secara internal, kami membagi
lalu error |
Secara internal, kami membagi
tetapi kemudian formulir asli dikirim ke target. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
Sebelum memulai
Sebelum menggunakan langkah-langkah dalam dokumen ini, pastikan Anda telah memahami cara mengonfigurasi properti untuk Edge di Private Cloud, yang dijelaskan dalam Cara mengonfigurasi Edge.
Mengonfigurasi allowDuplicates dan beberapa nilai untuk header
Seperti yang dijelaskan dalam properti header HTTP untuk memungkinkan duplikat dan
beberapa nilai, nilai properti HTTPHeader.ANY = allowDuplicates,
multivalued
menyiratkan bahwa semua header boleh memiliki duplikat dan beberapa nilai di
Apigee Edge. Namun, ada header tertentu yang nilainya ditimpa secara eksplisit agar tidak mengizinkan header duplikat atau beberapa nilai untuk ini menggunakan properti HTTPHeader.HEADER_NAME
.
Bagian ini menjelaskan cara mengonfigurasi properti
HTTPHeader.HEADER_NAME
guna mengizinkan duplikat dan beberapa nilai untuk
header HTTP apa pun di Pemroses Pesan, menggunakan token yang sesuai, sesuai dengan sintaksis
yang dijelaskan dalam Cara mengonfigurasi Edge.
Di bagian ini, kita akan menggunakan Expires
(dan myheader
) sebagai contoh
header yang ingin kita izinkan duplikat dan beberapa nilai seperti yang dijelaskan di bawah:
-
Tentukan nilai saat ini dari properti
HTTPHeaderHEADER_NAME
untuk memastikan properti ini belum diaktifkan untuk mengizinkan duplikat dan beberapa nilai menggunakan perintah berikut:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Misalnya, jika Anda mencoba menetapkan properti untuk header
Expires
, periksa nilai saat ini dari tokenHTTPHeader.Expires
properti di Pemroses Pesan:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Output perintah di atas menghasilkan salah satu dari hal berikut:
- Properti ini disetel ke kosong, kemudian menyiratkan bahwa nilai ditimpa (dan ini
adalah header dengan konfigurasi yang sudah ada) untuk TIDAK mengizinkan header duplikat dan beberapa
nilai. Artinya, Anda tidak diizinkan untuk mengirim header
Expires
lebih dari sekali sebagai bagian dari permintaan HTTP atau respons HTTP ke Apigee. - Tidak ada hit untuk properti tertentu, artinya nilai tersebut tidak ditimpa (dan ini BUKAN header dengan konfigurasi yang sudah ada sebelumnya). Ini berarti bahwa header spesifik dapat dikirim lebih dari sekali (duplikat diizinkan) sebagai bagian dari permintaan HTTP atau respons HTTP terhadap Apigee Edge.
- Properti ini ditetapkan dengan nilai
allowDuplicates, multivalued
, yang berarti nilai tersebut ditimpa secara eksplisit (dan ini adalah header dengan konfigurasi yang sudah ada sebelumnya). Ini berarti header spesifik dapat dikirim lebih dari sekali (duplikat diizinkan) sebagai bagian dari permintaan HTTP atau respons HTTP terhadap Apigee.
Contoh output perintah penelusuran:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Contoh output di atas menunjukkan bahwa properti
HTTPHeader.Expires
disetel ke kosong. Ini berarti properti tersebut ditimpa agar tidak mengizinkan duplikat atau beberapa nilai untuk headerExpires
. - Properti ini disetel ke kosong, kemudian menyiratkan bahwa nilai ditimpa (dan ini
adalah header dengan konfigurasi yang sudah ada) untuk TIDAK mengizinkan header duplikat dan beberapa
nilai. Artinya, Anda tidak diizinkan untuk mengirim header
- Jika Anda melihat bahwa properti yang sesuai dengan header tertentu ditimpa secara eksplisit agar tidak mengizinkan duplikat atau beberapa nilai seperti dalam contoh output di atas, hanya lakukan langkah-langkah berikut. Jika tidak ditimpa secara eksplisit, lewati langkah selanjutnya di bagian ini.
- Edit. Jika tidak ada, Anda dapat membuatnya:
/opt/apigee/customer/application/message-processor.properties
Misalnya, untuk membuka file menggunakan vi, masukkan perintah berikut:
vi /opt/apigee/customer/application/message-processor.properties
- Tambahkan baris dalam format berikut:
conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
- Simpan perubahan Anda.
Pastikan file properti dimiliki oleh pengguna
apigee
. Jika tidak, jalankan perintah berikut:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
Mulai ulang Pemroses Pesan:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Untuk memulai ulang tanpa memengaruhi traffic, lihat Memulai ulang berkelanjutan Prosesor Pesan tanpa memengaruhi traffic.
- Jika Anda memiliki lebih dari satu Pemroses Pesan, ulangi langkah-langkah di atas pada semua Pemroses Pesan.
Memverifikasi header dikonfigurasi agar memiliki duplikat dan beberapa nilai
Bagian ini menjelaskan cara memverifikasi bahwa properti HTTPHeader.HEADER_NAME
untuk header tertentu telah berhasil diperbarui untuk memungkinkan duplikat pada Pemroses Pesan.
Kita akan menggunakan Expires
sebagai contoh header dan memeriksa apakah properti
HTTPHeader.Expires
yang sesuai telah diperbarui.
Meskipun Anda menggunakan token conf_http_HTTPHeader.Expires
untuk memperbarui nilai pada Pemroses Pesan, Anda harus memverifikasi apakah properti HTTPHeader.Expires
sebenarnya telah ditetapkan dengan nilai baru.
- Pada mesin Message Processor, telusuri properti
HTTPHeader.HEADER_NAME
dalam direktori/opt/apigee/edge-message-processor/conf
dan periksa apakah properti tersebut telah ditetapkan dengan nilai baru, seperti yang ditunjukkan di bawah ini:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Misalnya, jika Anda ingin memastikan bahwa properti
HTTPHeader.Expires
ditetapkan dengan nilai baru, jalankan perintah berikut:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Jika nilai baru berhasil ditetapkan untuk
HTTPHeader.HEADER_NAME
di Pemroses Pesan, perintah di atas akan menampilkan nilai baru dalam filehttp.properties
. Contoh hasil dari perintah di atas setelah Anda mengonfigurasi
allowDuplicates
danmultiValued
adalah sebagai berikut:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- Pada contoh output di atas, perhatikan bahwa properti
HTTPHeader.Expires
telah ditetapkan dengan nilai baruallowDuplicates, multiValued
dihttp.properties
. Hal ini menunjukkan bahwa perilaku untuk mengizinkan duplikat dan beberapa nilai diHTTPHeader
berhasil dikonfigurasi di Pemroses Pesan. - Jika Anda masih melihat nilai lama untuk properti
HTTPHeader.HEADER_NAME
, pastikan Anda telah mengikuti semua langkah yang diuraikan dalam Mengonfigurasi allowDuplicates dan beberapa nilai untuk header dengan benar. Jika Anda melewatkan langkah apa pun, ulangi semua langkah lagi dengan benar.Pastikan proxy Anda berfungsi seperti yang diharapkan, terutama jika ada logika fungsional untuk mendapatkan dan menetapkan header di proxy.
- Jika Anda tetap tidak dapat mengubah properti, hubungi Dukungan Apigee Edge
Menonaktifkan allowDuplicates untuk header
Bagian ini menjelaskan cara mengonfigurasi properti HTTPHeader.{Headername}
agar
tidak mengizinkan duplikat dan beberapa nilai untuk header HTTP tertentu di Pemroses
Pesan, menggunakan token yang sesuai sesuai dengan sintaksis yang dijelaskan dalam
Cara mengonfigurasi Edge.
Di bagian ini, kita akan menggunakan Expires
(dan myheader
) sebagai contoh
header yang tidak ingin kita izinkan duplikatnya seperti yang dijelaskan di bawah:
-
Tentukan nilai saat ini dari properti
HTTPHeaderHEADER_NAME
untuk memastikan properti tersebut belum dinonaktifkan untuk mengizinkan duplikat dan beberapa nilai menggunakan perintah berikut:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Misalnya, jika Anda mencoba menetapkan properti untuk header
Expires
, periksa nilai tokenHTTPHeader.Expires
properti saat ini di Pemroses Pesan:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Output perintah di atas menghasilkan salah satu dari hal berikut:
- Properti ini disetel ke kosong, kemudian menyiratkan bahwa nilai iditimpa ke NOT
untuk memungkinkan header duplikat dan beberapa nilai. Artinya, Anda tidak diizinkan untuk mengirim
header
Expires
lebih dari sekali sebagai bagian dari permintaan HTTP atau respons HTTP ke Apigee. - Tidak ada hit untuk properti tertentu, artinya nilai tersebut tidak ditimpa dan ini adalah header NOT dengan konfigurasi yang sudah ada sebelumnya. Ini berarti bahwa header spesifik dapat dikirim lebih dari sekali (duplikat diizinkan) sebagai bagian dari permintaan HTTP atau respons HTTP terhadap Apigee Edge.
- Properti ini ditetapkan dengan nilai
allowDuplicates, multivalued
, yang berarti nilai tersebut ditimpa secara eksplisit dan ini adalah konfigurasi yang ada. Namun, ini berarti header spesifik dapat dikirim lebih dari sekali (duplikat diizinkan) sebagai bagian dari permintaan HTTP atau respons HTTP terhadap Apigee.
Contoh output #1
Contoh Output #1 dari perintah penelusuran:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
Contoh output menunjukkan bahwa properti
HTTPHeader.Expires
ditetapkan keallowDuplicates, multiValued
. Ini berarti properti tersebut ditimpa untuk memungkinkan nilai duplikat atau beberapa nilai untuk headerExpires
.Contoh output #2
Contoh Perintah dan Output #2 dari perintah penelusuran
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
Contoh output tidak menampilkan output, yang menyiratkan bahwa properti
HTTPHeader.myheader
ditetapkan keallowDuplicates, multiValued
secara default. Ini juga menyiratkan bahwa properti tidak ditimpa untuk header myheader, - Properti ini disetel ke kosong, kemudian menyiratkan bahwa nilai iditimpa ke NOT
untuk memungkinkan header duplikat dan beberapa nilai. Artinya, Anda tidak diizinkan untuk mengirim
header
- Jika Anda melihat salah satu dari hal berikut, lakukan langkah-langkah selanjutnya dalam bagian ini:
- Properti yang sesuai dengan header tertentu ditimpa untuk memungkinkan duplikat dan beberapa nilai seperti pada Contoh output #1 di atas (header dengan konfigurasi yang sudah ada sebelumnya)
- Tidak ada hit untuk properti yang sesuai dengan header tertentu seperti dalam Contoh output #2 di atas (bukan header dengan konfigurasi yang sudah ada sebelumnya)
Jika tidak, lewati langkah selanjutnya di bagian ini.
- Edit file berikut. Jika tidak ada, Anda dapat membuatnya.
/opt/apigee/customer/application/message-processor.properties
Misalnya, untuk membuka file menggunakan vi, masukkan perintah berikut:
vi /opt/apigee/customer/application/message-processor.properties
- Tambahkan baris dalam format berikut ke file properti:
Konfigurasi yang sudah ada
Skenario #1: Header dengan konfigurasi yang sudah ada:
conf_http_HTTPHeader.Expires=
Tidak ada konfigurasi yang sudah ada
Skenario #2: Bukan header dengan konfigurasi yang sudah ada:
conf/http.properties+HTTPHeader.myheader=
- Simpan perubahan Anda.
- Pastikan file properti dimiliki oleh pengguna
apigee
. Jika tidak, jalankan perintah berikut:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Mulai ulang Pemroses Pesan:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Untuk memulai ulang tanpa memengaruhi traffic, lihat Memulai ulang berkelanjutan Prosesor Pesan tanpa memengaruhi traffic.
- Jika Anda memiliki lebih dari satu Pemroses Pesan, ulangi langkah-langkah di atas pada semua Pemroses Pesan.
Memverifikasi header dikonfigurasi untuk tidak mengizinkan duplikat dan beberapa nilai
Bagian ini menjelaskan cara memverifikasi bahwa properti HTTPHeader.HEADER_NAME
untuk header tertentu telah berhasil diperbarui agar tidak mengizinkan duplikat pada Pemroses Pesan.
Kita akan menggunakan Expires
(dan myheader
) sebagai contoh header serta memeriksa apakah
properti HTTPHeader.Expires
(dan
HTTPHeader.myheader
) yang sesuai telah diperbarui.
Pada mesin Message Processor, telusuri properti
HTTPHeader.HEADER_NAME
dalam direktori/opt/apigee/edge-message- processor/conf
dan periksa apakah properti tersebut telah ditetapkan dengan nilai baru seperti yang ditunjukkan di bawah ini:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Misalnya, jika Anda ingin memeriksa properti
HTTPHeader.Expires
ditetapkan dengan nilai baru, Anda dapat menjalankan perintah berikut:Konfigurasi yang sudah ada
grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Tidak ada konfigurasi yang sudah ada
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
- Jika nilai header HTTP baru berhasil ditetapkan untuk
HTTPHeader.HEADER_NAME
I pada Pemroses Pesan, perintah di atas akan menampilkan nilai baru dalam filehttp.properties
. - Contoh hasil dari perintah di atas setelah Anda menonaktifkan
allowDuplicates
adalah sebagai berikut:Konfigurasi yang sudah ada
Skenario #1: Header Berakhir (header dengan konfigurasi yang sudah ada)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Tidak ada konfigurasi yang sudah ada
Skenario #2: Header myheader (bukan header dengan konfigurasi yang sudah ada)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
- Pada contoh output di atas, perhatikan bahwa properti
HTTPHeader.Expires
( danHTTPHeader.myheader
) telah ditetapkan dengan nilai baru {blank}
dihttp.properties
. Hal ini menunjukkan bahwa perilaku untuk mengizinkan duplikat dan beberapa nilai untuk header HTTP tertentuExpires
(danmyheader
) berhasil dinonaktifkan di Pemroses Pesan. Jika Anda masih melihat nilai lama untuk properti
HTTPHeader.Expires (or HTTPHeader.myheader)
, pastikan Anda telah mengikuti semua langkah yang diuraikan dalam Mengonfigurasi allowDuplicates dan beberapa nilai untuk header dengan benar. Jika Anda melewatkan langkah apa pun, ulangi semua langkah lagi dengan benar.Pastikan proxy Anda berfungsi seperti yang diharapkan, terutama jika ada logika fungsional untuk mendapatkan dan menetapkan header di proxy.
- Jika Anda tetap tidak dapat mengubah properti, hubungi Dukungan Apigee Edge.