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