Anda melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 502 Bad Gateway dengan kode error 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 405 Method Not Allowed status
kode tanpa header Allow.
Sesuai dengan spesifikasi
RFC 7231, bagian 6.5.5: 405 Method Not Allowed, server asal DIHARAPKAN membuat dan mengirim kolom header Allow dalam respons 405 yang berisi daftar metode yang saat ini didukung oleh resource target. Jika tidak, Apigee akan merespons dengan
502 Bad Gateway dan kode error protocol.http.Response405WithoutAllowHeader.
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Respons 405 tanpa header Allow 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:
- Login ke UI 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.
Buat grafik Fault Code terhadap Time.
Pilih sel yang memiliki kode fault
protocol.http.Response405WithoutAllowHeaderseperti yang ditunjukkan di bawah:
Informasi tentang kode fault
protocol.http.Response405WithoutAllowHeaderditampilkan seperti yang ditunjukkan di bawah:
Klik View logs dan luaskan salah satu permintaan yang gagal untuk melihat informasi selengkapnya.
- Dari jendela Logs, catat detail berikut:
- Status Code:
502 - Fault Source:
target - Fault Code:
protocol.http.Response405WithoutAllowHeader.
- Status Code:
- Jika Fault Source adalah
targetdan Fault Code adalahprotocol.http.Response405WithoutAllowHeader, hal ini menunjukkan bahwa server backend merespons dengan kode status405 Method Not Allowedtanpa headerAllow.
Alat pelacak
Untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan
sesi pelacakan dan
- Tunggu hingga error
502 Bad Gatewayterjadi, atau - Jika Anda dapat mereproduksi masalah, lakukan panggilan API untuk mereproduksi masalah -
502 Bad Gatewayerror
- Tunggu hingga error
Pastikan Show all FlowInfos diaktifkan:
- Pilih salah satu permintaan yang gagal dan periksa pelacakannya.
- Buka berbagai fase pelacakan dan temukan tempat terjadinya kegagalan.
Anda biasanya akan menemukan error dalam alur setelah fase Request sent to target server seperti yang ditunjukkan di bawah:
Catat nilai error dari pelacakan.
Pelacakan contoh di atas menunjukkan error sebagai
Received 405 Response without Allow Header. Karena error dimunculkan oleh Apigee setelah permintaan dikirim ke server backend, hal ini menunjukkan bahwa server backend mengirim kode status respons405tanpa headerAllow.- Buka Fase AX (Data Analisis Direkam) dalam pelacakan dan klik.
Scroll ke bawah ke bagian Error / Response Headers di panel Phase Details dan tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan di bawah:
- Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai
protocol.http.Response405WithoutAllowHeaderdantargetmasing-masing, yang menunjukkan bahwa error ini disebabkan karena backend mengirim kode status respons405tanpa headerAllow.Header Respons Nilai X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-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 utama tentang error HTTP
502. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dengan: ORG, ORG dan, PORT# diganti dengan nilai sebenarnya.
- Cari untuk melihat apakah ada
502error dengan kode errorprotocol.http.Response405WithoutAllowHeaderselama durasi tertentu (jika masalah terjadi di masa lalu) atau jika ada permintaan yang masih gagal dengan502. Jika Anda menemukan error
502dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.Response405WithoutAllowHeader, 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.Response405WithoutAllowHeaderX-Apigee-fault-source target
Penyebab: Respons 405 tanpa header Allow dari server backend
Diagnosis
- Tentukan Fault Code dan Fault Source untuk
502 Bad Gatewaymenggunakan Pemantauan API, Alat Pelacak, atau log akses NGINX seperti yang dijelaskan di Langkah-langkah diagnosis umum. - Jika Fault Code adalah
protocol.http.Response405WithoutAllowHeaderdan Fault Source memiliki nilaitarget, hal ini menunjukkan bahwa server backend telah merespons dengan kode status405tanpa headerAllow. Oleh karena itu, Apigee merespons kembali dengan502 Bad Gatewaydengan kode errorprotocol.http.Response405WithoutAllowHeader.
Resolusi
Gunakan salah satu metode berikut untuk mengatasi masalah ini:
Server backend
Opsi #1: Memperbaiki Server Backend untuk mengirim kode status 405 dengan header Allow:
Pastikan server backend selalu mematuhi spesifikasi RFC 7231, bagian 6.5.5: 405 Method Not Allowed dan mengirim dengan kode status
405dengan menyertakan daftar metode yang diizinkan sebagai bagian dari headerAllowseperti yang ditunjukkan di bawah:Allow: HTTP_METHODS
- Misalnya, jika server backend Anda mengizinkan metode
GET,POST, danHEAD, Anda harus memastikan bahwa headerAllowberisi metode tersebut sebagai berikut:Allow: GET, POST, HEAD
Penanganan gangguan
Opsi #2: Menggunakan Penanganan Fault untuk mengirim kode status 405 dengan header Allow dari proxy API Anda:
Jika server backend menampilkan kode status 405 tanpa header Allow, Anda dapat menggunakan penanganan gangguan untuk merespons kembali dengan kode status 405 dan header
Allow dari Proxy API Anda sebagai berikut:
Buat kebijakan seperti kebijakan AssignMessage atau kebijakan RaiseFault dan tetapkan kode status ke
405dengan headerAllowdan pesan kustom.Contoh kebijakan AssignMessage 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
FaultRulediTargetEndpoint, yang memanggil kebijakan saat mendapatkan error502dengan 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 proxy API Anda dan deploy revisi tersebut.
- Lakukan panggilan API dan verifikasi bahwa Anda mendapatkan kode status
405dengan headerAllow.
Mengonfigurasi properti
Opsi #3: Mengonfigurasi properti di Message Processor untuk mencegah Apigee Edge menampilkan error 502
- Jika Anda adalah pengguna Private Cloud, Anda dapat memperbarui properti
HTTP.ignore.allow_header.for.405ketrueuntuk mencegah Apigee Edge memunculkan error502, meskipun server backend merespons dengan kode status405tanpa headerAllowmenggunakan Panduan cara: Mengonfigurasi properti ignore allow header for 405 di Message Processor. - Jika Anda adalah pengguna Public Cloud, hubungi Dukungan Apigee Edge
Spesifikasi
Apigee mengharapkan respons 405 Method Not Allowed dari server backend beserta header Allow sesuai dengan spesifikasi berikut:
| Spesifikasi | |
|---|---|
| RFC 7231, bagian 6.5.5: 405 Method Not Allowed | |
| RFC 7231, bagian 7.4.1: Allow |
Poin penting yang perlu diperhatikan
Solusi yang direkomendasikan adalah memperbaiki server backend untuk mengirim kode status 405 dengan header Allow dan mematuhi spesifikasi
RFC 7231, bagian 6.5.5: 405 Method Not Allowed.
Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Informasi diagnostik yang harus dikumpulkan.
Informasi diagnostik yang harus dikumpulkan
Jika masalah berlanjut meskipun setelah mengikuti petunjuk di atas, 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 mereproduksi502 Bad Gatewaydengan kode errorprotocol.http.Response405WithoutAllowHeader - 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
- File pelacakan untuk permintaan API
Log akses NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dengan: ORG, ORG dan, PORT# diganti dengan nilai sebenarnya.
- Log sistem Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log