Terjadi error yang tidak diketahui di panel Coba API ini

Anda sedang 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

Pada 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 Developer Tools > tab Konsol adalah sebagai berikut:

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

Kemungkinan penyebab

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

Penyebab: Kesalahan kebijakan yang tidak tertangani

Diagnosis

  1. Pastikan masalah hanya terjadi jika yang diharapkan adalah respons non-2XX.
  2. Untuk permintaan yang gagal, pastikan ada kebijakan dalam alur proxy.
  3. Melacak permintaan dan periksa apakah kebijakan dengan continueOnError="false" gagal dan memunculkan kesalahan.
    1. Jika ya, verifikasi apakah kebijakan ProvideMessage CORS dijalankan atau tidak dalam alur respons error.
    2. Jika tidak, maka itulah penyebab masalah ini.
      Hal ini karena jika kebijakan dengan elemen continueOnError="false" 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 header CORS apa pun. Akibatnya, panggilan API dari portal developer terintegrasi gagal dengan Unknown error.

Screenshot berikut menampilkan contoh pesan error dan contoh pesan berhasil.

Contoh pesan error di panel Try this API portal terintegrasi dan di jendela Trace proxy:

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

Contoh pesan berhasil di panel Try this API portal terintegrasi dan di jendela Trace proxy:

contoh pesan berhasil, klik untuk gambar yang lebih besar contoh pesan berhasil

Resolusi

  1. Daripada mengandalkan pesan error default, sebaiknya terapkan aturan fault untuk menangani respons error. Sertakan kebijakan ProvideMessage CORS dengan header yang sesuai dan panggil di FaultRule.
  2. Terkadang, aturan kesalahan yang ditentukan untuk setiap kesalahan mungkin tidak dapat dilakukan. Oleh karena itu, aturan kesalahan default dapat diterapkan untuk menjalankan kebijakan Tetapkan Pesan CORS:
<?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 rekaman aktivitas.
  2. Header Access-Control-Allow-Origin hanya mengizinkan penetapan satu nilai. 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 di trace terlihat seperti:
    *,*
    , artinya server target dan kebijakan {i>assignMessage CORS<i} 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 yang sama dengan *,*:

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

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

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

Contoh yang menggunakan <Add>:

contoh menggunakan Tambahkan, klik untuk gambar yang lebih besar contoh Menggunakan Tambahkan

Contoh yang menggunakan <Set>:

contoh menggunakan Setel, klik untuk gambar yang lebih besar contoh menggunakan 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 hanya di satu tempat; baik di kebijakan ProvideMessage CORS 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 Harus mengumpulkan informasi diagnostik.

Harus mengumpulkan informasi diagnostik

Kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:

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