เกิดข้อผิดพลาดที่ไม่รู้จักในแผง API นี้

คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่ เอกสารประกอบเกี่ยวกับ Apigee X.
ข้อมูล

ลักษณะปัญหา

การเรียก API จากพอร์ทัลนักพัฒนาซอฟต์แวร์ที่ผสานรวมไม่สำเร็จด้วย Unknown Error หรือคำตอบที่ว่างเปล่าใน ลองใช้ API นี้ แผง

ข้อความแสดงข้อผิดพลาด

คุณอาจเห็นการตอบกลับที่ว่างเปล่าหรือข้อความแสดงข้อผิดพลาดต่อไปนี้สำหรับ API คำขอในพอร์ทัลที่ผสานรวม

Unknown Error

ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ > แท็บคอนโซล คุณจะเห็นข้อมูลต่อไปนี้ ข้อผิดพลาด:

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.

ข้อความแสดงข้อผิดพลาดทั่วไปตามที่แสดงใน เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ > แท็บคอนโซลมีดังนี้

ข้อความแสดงข้อผิดพลาดทั่วไป ให้คลิกเพื่อดูภาพขนาดใหญ่ ข้อความแสดงข้อผิดพลาดทั่วไป

สาเหตุที่เป็นไปได้

สาเหตุ คำอธิบาย วิธีการแก้ปัญหาสำหรับ
ความผิดเกี่ยวกับนโยบายที่ไม่มีการจัดการ ระบบจะส่งการตอบกลับข้อผิดพลาดเริ่มต้นโดยไม่มีส่วนหัว CORS เมื่อนโยบายล้มเหลวในขั้นตอนรันไทม์ของคำขอ API ผู้ใช้ Edge Public Cloud
ค่า Access-Control-Allow-Origin มีหลายค่า การใช้ "เพิ่ม" แทน "ตั้งค่า" ในนโยบาย "มอบหมายข้อความ" ผู้ใช้ Edge Public Cloud

สาเหตุ: ความผิดของนโยบายที่ไม่มีการจัดการ

การวินิจฉัย

  1. ยืนยันว่าปัญหาเกิดขึ้นเฉพาะในกรณีที่คาดว่าจะได้รับคำตอบที่ไม่ใช่ 2XX เท่านั้น
  2. สำหรับคำขอที่ล้มเหลว ให้ยืนยันว่ามีนโยบายในกระบวนการพร็อกซี
  3. ติดตามคำขอและตรวจสอบว่านโยบายที่มี continueOnError="false" ล้มเหลวและเพิ่มความผิด
    1. ถ้าใช่ ให้ตรวจสอบว่า ดำเนินการตามนโยบาย AssignedMessage CORS หรือไม่เนื่องจากข้อผิดพลาด ลำดับขั้นตอนการตอบสนอง
    2. หากไม่ นั่นเป็นสาเหตุของปัญหานี้
      นั่นเป็นเพราะ นโยบายทั้งหมดที่มีองค์ประกอบ continueOnError="false" ไม่สำเร็จ คำขอจะเข้าสู่ ขั้นตอนการตอบสนองต่อข้อผิดพลาด ถ้าไม่มีการจัดการข้อผิดพลาดอย่างชัดแจ้ง การตอบกลับข้อผิดพลาด การตอบกลับข้อผิดพลาดเริ่มต้นจะเกี่ยวข้อง ไปยังนโยบายจะส่งกลับ การตอบกลับข้อผิดพลาดนี้ไม่มี ส่วนหัว CORS ด้วยเหตุนี้ การเรียก API จากนักพัฒนาซอฟต์แวร์ที่ผสานรวม พอร์ทัลล้มเหลวด้วย Unknown error

ภาพหน้าจอต่อไปนี้แสดงตัวอย่างข้อความแสดงข้อผิดพลาดและตัวอย่าง ข้อความแสดงความสำเร็จ

ตัวอย่างข้อความแสดงข้อผิดพลาดในแผงลองใช้ API นี้ในพอร์ทัลที่ผสานรวม และในหน้าต่างTraceของพร็อกซี ให้ทำดังนี้

ดูตัวอย่างข้อความแสดงข้อผิดพลาด คลิกเพื่อดูรูปภาพขนาดใหญ่ขึ้น ตัวอย่างข้อความแสดงข้อผิดพลาด

ตัวอย่างข้อความแสดงความสำเร็จในแผงลองใช้ API นี้ในพอร์ทัลที่ผสานรวม และในหน้าต่างTraceของพร็อกซี ให้ทำดังนี้

ตัวอย่างข้อความแสดงความสำเร็จ คลิกเพื่อดูรูปภาพขนาดใหญ่ขึ้น ตัวอย่างข้อความแสดงความสำเร็จ

ความละเอียด

  1. แทนที่จะใช้ข้อความแสดงข้อผิดพลาดเริ่มต้น ต้องใช้กฎข้อผิดพลาดเพื่อจัดการการตอบกลับข้อผิดพลาด มี ระบุนโยบาย CORS ของข้อความที่มีส่วนหัวที่เหมาะสม และเรียกใช้ ในช่วง FaultRule
  2. บางครั้ง การกำหนดกฎความผิดพลาดสำหรับ ความผิดพลาด จึงสามารถใช้กฎข้อผิดพลาดเริ่มต้นเพื่อเรียกใช้ นโยบาย AssignMessage 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>

สาเหตุ: มีค่า Access-Control-Allow-Origin หลายค่า

การวินิจฉัย

  1. ตรวจสอบค่าของส่วนหัว Access-Control-Allow-Origin ใน เซสชันการติดตาม
  2. ส่วนหัว Access-Control-Allow-Origin อนุญาตให้มีค่าเดียวเท่านั้น ที่จะตั้งค่า การตั้งค่ามากกว่า 1 ค่าอาจทำให้เกิดปัญหา CORS และ พอร์ทัลนักพัฒนาซอฟต์แวร์จะแสดงผลการตอบกลับไม่ได้
  3. หากค่าของส่วนหัว Access-Control-Allow-Origin ในการติดตาม จะมีลักษณะดังนี้
    *,*
    ซึ่งหมายความว่าทั้งเซิร์ฟเวอร์เป้าหมายและ นโยบาย AssignedMessage CORS กำหนดค่า
  4. ซึ่งอาจเกิดขึ้นเมื่อผู้ใช้ <Add> element สำหรับ Access-Control-Allow-Origin ใน หรือแบ็กเอนด์เองก็ตั้งค่าหลายค่า

ตัวอย่างเช่น Access-Control-Allow-Origin ที่เท่ากับ *,*

ตัวอย่างที่ใช้หลายค่า คลิกเพื่อดูรูปภาพขนาดใหญ่ขึ้น ตัวอย่างค่าที่ใช้หลายค่า

ตัวอย่างเช่น Access-Control-Allow-Origin ที่เท่ากับ *

ตัวอย่างค่าเดี่ยวที่ใช้ คลิกเพื่อดูรูปภาพขนาดใหญ่ ตัวอย่างค่าเดี่ยวที่ใช้

ตัวอย่างที่ใช้ <Add>

ตัวอย่างเช่น &quot;เพิ่ม&quot;
คลิกเพื่อดูรูปภาพขนาดใหญ่ขึ้น ตัวอย่างการใช้ Add

ตัวอย่างที่ใช้ <Set>

เช่น ใช้การตั้งค่า แล้วคลิกเพื่อดูภาพขนาดใหญ่ ตัวอย่างการใช้ Set

ความละเอียด

  1. วิธีการที่แนะนำคือการใช้ <Set> element (แทนที่จะเป็น <Add> element) สำหรับ Access-Control-Allow-Origin เป็น สามารถใช้ได้เพียงค่าเดียวเท่านั้น
  2. หรือตั้งค่าส่วนหัว Access-Control-Allow-Origin เฉพาะ ที่เดียว อย่างใดอย่างหนึ่ง กำหนดนโยบาย CORS ของข้อความ หรือเซิร์ฟเวอร์เป้าหมาย
<?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>

หากยังต้องการความช่วยเหลือจากทีมสนับสนุนของ Apigee ให้ไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย

ต้องรวบรวมข้อมูลการวินิจฉัย

รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ แล้วจึงติดต่อ การสนับสนุน Apigee Edge:

  • ชื่อองค์กร
  • ชื่อสภาพแวดล้อม
  • ชื่อพร็อกซี API
  • ใช้คำสั่ง curl เพื่อสร้างข้อผิดพลาดซ้ำ
  • ไฟล์การติดตามสำหรับคำขอ API
  • เอาต์พุตที่สมบูรณ์ของการตอบกลับจากเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์พร้อมกับ ขนาดของเพย์โหลด