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

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

ลักษณะปัญหา

การเรียก 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. หากใช่ ให้ตรวจสอบว่า นโยบาย AssignMessage CORS ทำงานหรือไม่ในโฟลว์การตอบกลับข้อผิดพลาด
    2. หากไม่ทำงาน นั่นคือสาเหตุของปัญหานี้
      เนื่องจากเมื่อ นโยบายใดก็ตามที่มีองค์ประกอบ continueOnError="false"ล้มเหลว คำขอจะเข้าสู่ โฟลว์การตอบกลับข้อผิดพลาด หากไม่มีการจัดการข้อผิดพลาดอย่างชัดเจนใน โฟลว์การตอบกลับข้อผิดพลาด ระบบจะส่งการตอบกลับข้อผิดพลาดเริ่มต้นที่สอดคล้องกับ นโยบายกลับไป การตอบกลับข้อผิดพลาดนี้ไม่มีส่วนหัว CORS ด้วยเหตุนี้ การเรียก API จากพอร์ทัลนักพัฒนาแอปที่ผสานรวม จึงล้มเหลวโดยแสดง Unknown error

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

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

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

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

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

ความละเอียด

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

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

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

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

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

ตัวอย่างการใช้ <Add>

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

ตัวอย่างการใช้ <Set>

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

ความละเอียด

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