Terjadi error yang tidak diketahui di panel Coba API ini

Anda melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Gejala

Panggilan API dari portal developer terintegrasi gagal dengan Unknown Error atau respons kosong di panel Coba API ini.

Pesan error

Anda mungkin melihat respons kosong atau pesan error berikut untuk permintaan API di portal terintegrasi:

Unknown Error

Di tab Developer Tools > Console, Anda akan melihat error berikut:

Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is
present on the requested resource.

Pesan error umum seperti yang terlihat di tab Developer Tools > Console adalah sebagai berikut:

pesan error umum, klik untuk melihat gambar yang lebih besar pesan error umum

Kemungkinan penyebab

Penyebab Deskripsi Petunjuk pemecahan masalah yang berlaku untuk
Kesalahan kebijakan yang tidak ditangani Respons error default dikirim tanpa header CORS, jika ada kebijakan yang gagal dalam alur runtime permintaan API. Pengguna Edge Public Cloud
Beberapa Nilai untuk Access-Control-Allow-Origin Menggunakan Tambahkan, bukan Setel di Kebijakan Pesan Tetapkan. Pengguna Edge Public Cloud

Penyebab: Kesalahan kebijakan yang tidak ditangani

Diagnosis

  1. Pastikan masalah hanya terjadi jika respons non-2XX diharapkan.
  2. Untuk permintaan yang gagal, pastikan ada kebijakan dalam alur proxy.
  3. Lacak permintaan dan periksa apakah kebijakan dengan continueOnError="false" gagal dan menimbulkan kesalahan.
    1. Jika ya, verifikasi apakah kebijakan CORS AssignMessage dieksekusi atau tidak dalam alur respons error.
    2. Jika tidak, itulah penyebab masalah ini.
      Hal ini karena jika ada kebijakan dengan elemen continueOnError="false" yang gagal, permintaan akan memasuki alur respons error. Jika tidak ada penanganan kesalahan eksplisit dalam alur respons error, respons error default yang sesuai dengan kebijakan akan dikirim kembali. Respons error ini tidak memiliki CORS header. Akibatnya, panggilan API dari developer terintegrasi portal gagal dengan Unknown error.

Screenshot berikut menampilkan contoh pesan error dan contoh pesan keberhasilan.

Contoh pesan error di panel Coba API ini portal terintegrasi dan di jendela Trace proxy:

contoh pesan error, klik untuk melihat gambar yang lebih besar contoh pesan error

Contoh pesan keberhasilan di panel Coba API ini portal terintegrasi dan di jendela Trace proxy:

contoh pesan keberhasilan, klik untuk melihat gambar yang lebih besar contoh pesan keberhasilan

Resolusi

  1. Daripada mengandalkan pesan error default, aturan kesalahan harus diterapkan untuk menangani respons error. Sertakan kebijakan CORS AssignMessage dengan header yang sesuai dan panggil di FaultRule.
  2. Terkadang, aturan kesalahan mungkin tidak dapat ditentukan untuk setiap kesalahan. Oleh karena itu, aturan kesalahan default dapat diterapkan untuk menjalankan kebijakan CORS AssignMessage:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="proxy-endpoint-name">
    <Description/>
    <!-- Add a default fault rule to add CORS -->
    <DefaultFaultRule name="fault-rule">
        <Step>
            <Name>add-cors</Name>
        </Step>
    </DefaultFaultRule>
    <FaultRules/>
    <!--
    <Flows />
    Rest of the proxy definition
    -->
</ProxyEndpoint>

Penyebab: Beberapa Nilai untuk Access-Control-Allow-Origin

Diagnosis

  1. Periksa nilai header Access-Control-Allow-Origin dalam sesi trace.
  2. Header Access-Control-Allow-Origin hanya mengizinkan satu nilai untuk ditetapkan. Menetapkan lebih dari satu nilai dapat menyebabkan masalah CORS dan portal developer akan gagal merender respons apa pun.
  3. Jika nilai header Access-Control-Allow-Origin dalam trace terlihat seperti:
    *,*
    artinya server target dan kebijakan CORS AssignMessage menetapkan nilainya.
  4. Hal ini dapat terjadi jika pengguna telah menggunakan <Add> element untuk Access-Control-Allow-Origin dalam kebijakan, atau backend itu sendiri menetapkan beberapa nilai.

Contoh Access-Control-Allow-Origin sama dengan *,*:

contoh beberapa nilai yang digunakan, klik untuk melihat gambar yang lebih besar contoh beberapa nilai yang digunakan

Contoh Access-Control-Allow-Origin sama dengan *:

contoh nilai tunggal yang digunakan, klik untuk melihat gambar yang lebih besar contoh nilai tunggal yang digunakan

Contoh menggunakan <Add>:

contoh menggunakan Tambahkan, klik untuk melihat gambar yang lebih besar Contoh Penggunaan Tambahkan

Contoh menggunakan <Set>:

contoh menggunakan Setel, klik untuk melihat gambar yang lebih besar Contoh penggunaan Set

Resolusi

  1. Pendekatan yang direkomendasikan adalah menggunakan <Set> element (bukan <Add> element) untuk Access-Control-Allow-Origin karena hanya satu nilai yang diizinkan.
  2. Atau, tetapkan header Access-Control-Allow-Origin di satu tempat saja; kebijakan CORS AssignMessage atau server target.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors">
    <DisplayName>Set CORS</DisplayName>
    <FaultRules/>
    <Properties/>
    <Set>
        <Headers>
            <Header name="Access-Control-Allow-Origin">*</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Informasi diagnostik yang harus dikumpulkan.

Informasi diagnostik yang harus dikumpulkan

Kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:

  • Nama organisasi
  • Nama lingkungan
  • Nama API Proxy
  • Perintah curl lengkap yang digunakan untuk mereproduksi error
  • File trace untuk permintaan API
  • Output lengkap respons dari server target/backend beserta ukuran payload