คุณกำลังดูเอกสารประกอบของ 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 |
สาเหตุ: ข้อผิดพลาดของนโยบายที่ไม่ได้จัดการ
การวินิจฉัย
- ตรวจสอบว่าปัญหาเกิดขึ้นเฉพาะในกรณีที่คาดว่าจะมีการตอบกลับที่ไม่ใช่
2XX - สำหรับคำขอที่ล้มเหลว ให้ตรวจสอบว่ามีนโยบายในโฟลว์พร็อกซี
-
ติดตามคำขอ และตรวจสอบว่านโยบายที่มี
continueOnError="false"ล้มเหลวและทำให้เกิดข้อผิดพลาดหรือไม่ - หากใช่ ให้ตรวจสอบว่า นโยบาย AssignMessage CORS ทำงานหรือไม่ในโฟลว์การตอบกลับข้อผิดพลาด
- หากไม่ทำงาน นั่นคือสาเหตุของปัญหานี้
เนื่องจากเมื่อ นโยบายใดก็ตามที่มีองค์ประกอบcontinueOnError="false"ล้มเหลว คำขอจะเข้าสู่ โฟลว์การตอบกลับข้อผิดพลาด หากไม่มีการจัดการข้อผิดพลาดอย่างชัดเจนใน โฟลว์การตอบกลับข้อผิดพลาด ระบบจะส่งการตอบกลับข้อผิดพลาดเริ่มต้นที่สอดคล้องกับ นโยบายกลับไป การตอบกลับข้อผิดพลาดนี้ไม่มีส่วนหัว CORS ด้วยเหตุนี้ การเรียก API จากพอร์ทัลนักพัฒนาแอปที่ผสานรวม จึงล้มเหลวโดยแสดงUnknown error
ภาพหน้าจอต่อไปนี้แสดงข้อความแสดงข้อผิดพลาดและข้อความแสดงความสำเร็จ
ตัวอย่างข้อความแสดงข้อผิดพลาดในแผงลองใช้ API นี้ ของพอร์ทัลที่ผสานรวม และในหน้าต่างการติดตาม ของพร็อกซี
ตัวอย่างข้อความแสดงความสำเร็จในแผงลองใช้ API นี้ ของพอร์ทัลที่ผสานรวม และในหน้าต่างการติดตาม ของพร็อกซี:
ความละเอียด
- คุณต้องใช้นโยบายกฎข้อผิดพลาด เพื่อจัดการการตอบกลับข้อผิดพลาดแทนที่จะอาศัยข้อความแสดงข้อผิดพลาดเริ่มต้น รวม นโยบาย AssignMessage CORS ที่มีส่วนหัวที่เหมาะสมและเรียกใช้นโยบายดังกล่าวใน FaultRule
- บางครั้งการกำหนดกฎข้อผิดพลาดสำหรับข้อผิดพลาดแต่ละรายการอาจไม่สามารถทำได้ ดังนั้นคุณจึงสามารถใช้นโยบายกฎข้อผิดพลาดเริ่มต้นเพื่อเรียกใช้นโยบาย 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
การวินิจฉัย
- ตรวจสอบค่าของส่วนหัว Access-Control-Allow-Origin ใน เซสชันการติดตาม
- ส่วนหัว Access-Control-Allow-Origin อนุญาตให้ตั้งค่าได้เพียงค่าเดียว การตั้งค่ามากกว่า 1 ค่าอาจทำให้เกิดปัญหา CORS และพอร์ทัลนักพัฒนาซอฟต์แวร์จะไม่แสดงผลการตอบกลับใดๆ
- หากค่าของส่วนหัว Access-Control-Allow-Origin ในการติดตาม
มีลักษณะดังนี้:
*,*แสดงว่าทั้งเซิร์ฟเวอร์เป้าหมายและ นโยบาย AssignMessage CORS กำลังตั้งค่า - ปัญหานี้อาจเกิดขึ้นเมื่อผู้ใช้ใช้
<Add> elementสำหรับ Access-Control-Allow-Origin ใน นโยบาย หรือแบ็กเอนด์เองกำลังตั้งค่าหลายค่า
ตัวอย่าง Access-Control-Allow-Origin เท่ากับ *,*
ตัวอย่าง Access-Control-Allow-Origin เท่ากับ *
ตัวอย่างการใช้ <Add>
ตัวอย่างการใช้ <Set>
ความละเอียด
- แนวทางที่แนะนำคือการใช้
<Set> element(แทน<Add> element) สำหรับ Access-Control-Allow-Origin เนื่องจาก อนุญาตให้ใช้ได้เพียงค่าเดียว - หรือตั้งค่าส่วนหัว 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
- เอาต์พุตที่สมบูรณ์ของการตอบกลับจากเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ พร้อมกับ ขนาดของเพย์โหลด