Anda sedang melihat dokumentasi Apigee Edge.
Buka
Dokumentasi Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 502 Bad Gateway
dengan error
kode protocol.http.Response405WithoutAllowHeader
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 berikut:
{ "fault":{ "faultstring":"Received 405 Response without Allow Header", "detail":{ "errorcode":"protocol.http.Response405WithoutAllowHeader" } } }
Kemungkinan penyebab
Error ini terjadi jika server backend merespons dengan status 405 Method Not Allowed
kode tanpa header Allow
.
Sesuai dengan spesifikasi
RFC 7231, bagian 6.5.5: 405 Metode Tidak Diizinkan, diharapkan bahwa server asal
HARUS membuat dan mengirim kolom header Allow
dalam respons 405
yang berisi
daftar metode resource target yang saat ini didukung. Jika tidak, Apigee akan merespons dengan
502 Bad Gateway
dan kode error protocol.http.Response405WithoutAllowHeader
.
Penyebab | Deskripsi | Petunjuk pemecahan masalah berlaku untuk |
---|---|---|
Respons 405 tanpa Izinkan header dari server backend | Server backend yang memproses permintaan API merespons dengan kode status 405 tanpa header Allow . |
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:
- Masuk ke UI 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.
Gambarkan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode fault
protocol.http.Response405WithoutAllowHeader
seperti yang ditunjukkan di bawah ini:Informasi tentang kode kesalahan
protocol.http.Response405WithoutAllowHeader
ditampilkan seperti yang ditunjukkan di bawah ini:Klik Lihat log , lalu luaskan salah satu permintaan yang gagal untuk melihat informasi selengkapnya.
- Dari jendela Logs, perhatikan detail berikut:
- Kode Status:
502
- Sumber Kesalahan:
target
- Kode Kesalahan:
protocol.http.Response405WithoutAllowHeader
.
- Kode Status:
- Jika Sumber Kesalahan adalah
target
dan Kode Kesalahan adalahprotocol.http.Response405WithoutAllowHeader
, yang menunjukkan bahwa backend server merespons dengan kode status405 Method Not Allowed
tanpa HeaderAllow
.
Alat rekaman aktivitas
Untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan
sesi rekaman aktivitas dan
- Tunggu hingga error
502 Bad Gateway
terjadi, atau - Jika Anda dapat mereproduksi masalah, lakukan panggilan API untuk mereproduksi masalah -
502 Bad Gateway
error
- Tunggu hingga error
Pastikan Tampilkan semua FlowInfos diaktifkan:
- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitasnya.
- Menavigasi melalui berbagai fase pelacakan dan menemukan tempat terjadinya kegagalan.
Anda akan menemukan error ini biasanya dalam alur setelah Permintaan dikirim ke server target seperti yang ditunjukkan di bawah ini:
Perhatikan nilai error dari trace.
Contoh rekaman aktivitas di atas menunjukkan error sebagai
Received 405 Response without Allow Header
. Karena error dimunculkan oleh Apigee setelah permintaan dikirim ke backend server, hal ini menunjukkan bahwa server backend mengirim kode status respons405
tanpa headerAllow
.- Buka Fase AX (Data Analytics Direkam) di rekaman aktivitas, lalu klik Fase tersebut.
Scroll ke bawah ke bagian Error / Respons Header di Detail Fase panel dan menentukan X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan di bawah ini:
- Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai
protocol.http.Response405WithoutAllowHeader
dantarget
, menunjukkan bahwa error ini disebabkan karena backend mengirim Kode status respons405
tanpa headerAllow
.Header Respons Nilai X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
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
502
HTTP. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Di mana: ORG, ORG, dan PORT# diganti dengan nilai sebenarnya.
- Telusuri apakah ada
502
error dengan kode errorprotocol.http.Response405WithoutAllowHeader
selama durasi tertentu (jika terjadi di masa lalu) atau jika ada permintaan yang masih gagal dengan502
. Jika Anda menemukan error
502
dengan X-Apigee-fault-code yang cocok denganprotocol.http.Response405WithoutAllowHeader
, lalu tentukan nilai parameter X-Apigee-fault-source.Contoh error 502 dari log akses NGINX:
Contoh entri 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.Response405WithoutAllowHeader
X-Apigee-fault-source target
Penyebab: Respons 405 tanpa header Izinkan dari server backend
Diagnosis
- Tentukan Kode Kesalahan dan Sumber Kesalahan untuk
502 Bad Gateway
menggunakan Pemantauan API, Trace Tool, atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum. - Jika Kode Kesalahan adalah
protocol.http.Response405WithoutAllowHeader
dan Sumber Kesalahan memiliki nilaitarget
, maka ini menunjukkan bahwa server backend memiliki merespons dengan kode status405
tanpa headerAllow
. Oleh karena itu, Apigee merespons kembali dengan502 Bad Gateway
dengan kode errorprotocol.http.Response405WithoutAllowHeader
.
Resolusi
Gunakan salah satu metode berikut untuk menyelesaikan masalah:
Server backend
Opsi #1: Memperbaiki Server Backend untuk mengirim kode status 405 dengan header Allow:
Memastikan server backend selalu mematuhi spesifikasi RFC 7231, bagian 6.5.5: 405 Method Not Allowed dan mengirim dengan status
405
kode dengan menyertakan daftar metode yang diizinkan sebagai bagian dari headerAllow
sebagaimana ditunjukkan di bawah ini:Allow: HTTP_METHODS
- Misalnya, jika server backend Anda mengizinkan
GET
,POST
, dan metodeHEAD
, Anda perlu memastikan bahwa headerAllow
berisi parameter tersebut sebagai berikut:Allow: GET, POST, HEAD
Penanganan fault
Opsi #2: Gunakan Penanganan Fault untuk mengirim kode status 405 dengan header Allow dari API Anda proxy:
Jika server backend menampilkan kode status 405
tanpa Allow
, Anda dapat menggunakan penanganan fault untuk merespons kembali dengan kode status 405
Allow
dari proxy API Anda sebagai berikut:
Buat kebijakan seperti Kebijakan PrepareMessage atau kebijakan RaiseFault dan tetapkan kode status ke
405
dengan headerAllow
dan kustom untuk membuat pesan email baru.Contoh kebijakan MenetapkanMessage untuk mengirim 405 dengan header Allow:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Buat
FaultRule
diTargetEndpoint
yang akan memanggil kebijakan setelah mendapatkan error502
dengan kode errorprotocol.http.Response405WithoutAllowHeader
.Contoh konfigurasi TargetEndpoint yang menampilkan FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>
- Simpan perubahan ini dalam revisi baru untuk proxy API Anda dan deploy revisi.
- Lakukan panggilan API dan verifikasi bahwa Anda mendapatkan kode status
405
dengan HeaderAllow
.
Konfigurasi properti
Opsi #3: Konfigurasikan properti di Pemroses Pesan untuk mencegah Apigee Edge menampilkan error 502
- Jika Anda adalah pengguna Private Cloud, Anda dapat memperbarui properti
HTTP.ignore.allow_header.for.405
hinggatrue
untuk mencegah Apigee Edge memunculkan error502
, meskipun server backend merespons dengan405
kode status tanpa headerAllow
menggunakan panduan Cara Kerja: Mengonfigurasi header abaikan izinkan untuk properti 405 di Pemroses Pesan. - Jika Anda adalah pengguna Cloud Publik, silakan hubungi Dukungan Apigee Edge
Spesifikasi
Apigee mengharapkan respons 405 Method Not Allowed
dari server backend beserta
dengan header Allow
sesuai spesifikasi berikut:
Spesifikasi | |
---|---|
RFC 7231, bagian 6.5.5: Metode 405 Tidak Diizinkan | |
RFC 7231, bagian 7.4.1: Mengizinkan |
Poin penting yang perlu diperhatikan
Solusi yang direkomendasikan adalah memperbaiki server backend agar mengirim kode status 405
dengan header Allow
dan mematuhi spesifikasi
RFC 7231, bagian 6.5.5: Metode 405 Tidak Diizinkan.
Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Harus mengumpulkan informasi diagnostik.
Harus mengumpulkan informasi diagnostik
Jika masalah berlanjut bahkan setelah mengikuti instruksi di atas, kumpulkan informasi diagnostik, 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 mereproduksi502 Bad Gateway
dengan kode errorprotocol.http.Response405WithoutAllowHeader
- 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~ORG.PORT#_access_log
Di mana: ORG, ORG, dan PORT# diganti dengan nilai sebenarnya.
- Log sistem Pemroses Pesan
/opt/apigee/var/log/edge-message-processor/logs/system.log