Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về
Apigee X. thông tin
Triệu chứng
Lệnh gọi API từ cổng thông tin tích hợp dành cho nhà phát triển không thực hiện được với Unknown Error
hoặc phản hồi trống trong bảng điều khiển Try this API (Dùng thử API này).
Thông báo lỗi
Bạn có thể thấy một phản hồi trống hoặc thông báo lỗi sau đây đối với các yêu cầu API trong cổng thông tin tích hợp:
Unknown Error
Trên thẻ Công cụ cho nhà phát triển > Bảng điều khiển, bạn sẽ thấy lỗi sau:
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.
Thông báo lỗi chung trên thẻ Công cụ cho nhà phát triển > Bảng điều khiển hiển thị như sau:
Các nguyên nhân có thể
Nguyên nhân | Nội dung mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
---|---|---|
Lỗi chính sách không được xử lý | Phản hồi lỗi mặc định được gửi mà không có tiêu đề CORS, khi có bất kỳ chính sách nào không thành công trong quy trình thời gian chạy của yêu cầu API. | Người dùng Edge Public Cloud |
Nhiều giá trị cho Access-Control-Allow-Origin | Sử dụng Thêm thay vì Đặt trong Chính sách chỉ định thư. | Người dùng Edge Public Cloud |
Nguyên nhân: Lỗi chính sách không được xử lý
Chẩn đoán
- Xác minh rằng vấn đề chỉ xảy ra nếu dự kiến phản hồi không phải là
2XX
. - Đối với các yêu cầu không thành công, hãy xác minh rằng có các chính sách trong luồng proxy.
-
Theo dõi yêu cầu và kiểm tra xem một chính sách có
continueOnError="false"
có thực hiện được không và có phát sinh lỗi hay không. - Nếu có, hãy xác minh xem chính sách AttributionMessage CORS có được thực thi hay không trong quy trình phản hồi lỗi.
- Nếu không thì đó chính là nguyên nhân của vấn đề này.
Nguyên nhân là do khi bất kỳ chính sách nào có phần tửcontinueOnError="false"
không thành công, yêu cầu sẽ chuyển sang quy trình phản hồi lỗi. Nếu không có hoạt động xử lý lỗi rõ ràng nào trong quy trình phản hồi lỗi, thì phản hồi lỗi mặc định tương ứng với chính sách sẽ được gửi trả về. Phản hồi lỗi này không có tiêu đề CORS nào. Do đó, lệnh gọi API từ cổng thông tin tích hợp dành cho nhà phát triển sẽ không thực hiện được vớiUnknown error
.
Các ảnh chụp màn hình sau đây cho thấy một thông báo lỗi ví dụ và một thông báo thành công.
Thông báo lỗi mẫu trong bảng điều khiển Try this API (Thử API này) và trong cửa sổ Trace (Theo dõi) proxy:
Ví dụ về thông báo thành công trong bảng điều khiển Try this API (Thử API này) qua cổng thông tin tích hợp và trong cửa sổ Trace (Theo dõi) proxy:
Độ phân giải
- Thay vì dựa vào thông báo lỗi mặc định, bạn phải triển khai quy tắc lỗi để xử lý phản hồi lỗi. Bao gồm một chính sách AttributionMessage CORS với các tiêu đề thích hợp và gọi chính sách đó trong FaultRule.
- Đôi khi, có thể không xác định được quy tắc lỗi cho từng lỗi; do đó, quy tắc lỗi mặc định có thể được triển khai để thực thi chính sáchassignMessage 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>
Nguyên nhân: Nhiều giá trị cho Access-Control-Allow-Origin
Chẩn đoán
- Kiểm tra giá trị của tiêu đề Access-Control-Allow-Origin trong một phiên theo dõi.
- Tiêu đề Access-Control-Allow-Origin chỉ cho phép đặt một giá trị duy nhất. Việc đặt nhiều giá trị có thể gây ra sự cố CORS và cổng thông tin dành cho nhà phát triển sẽ không hiển thị bất kỳ phản hồi nào.
- Nếu giá trị của tiêu đề Access-Control-Allow-Origin trong dấu vết có dạng như sau:
*,*
thì tức là cả máy chủ đích và chính sách AttributionMessage CORS đều đang đặt giá trị. - Điều này có thể xảy ra khi người dùng đã sử dụng
<Add> element
cho thuộc tính Access-Control-Allow-Origin trong một chính sách hoặc chính phần phụ trợ đang đặt nhiều giá trị.
Ví dụ: Access-Control-Allow-Origin bằng *,*
:
Ví dụ: Access-Control-Allow-Origin bằng *
:
Ví dụ về cách sử dụng <Add>
:
Ví dụ về cách sử dụng <Set>
:
Độ phân giải
- Bạn nên sử dụng
<Set> element
(thay vì<Add> element
) cho Access-Control-Allow-Origin vì chỉ cho phép một giá trị duy nhất. - Ngoài ra, bạn chỉ cần thiết lập tiêu đề Access-Control-Allow-Origin ở một nơi; chính sách AttributionMessage CORS hoặc máy chủ mục tiêu.
<?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>
Nếu bạn vẫn cần Nhóm hỗ trợ Apigee hỗ trợ, hãy truy cập trang Phải thu thập thông tin chẩn đoán.
Phải thu thập thông tin chẩn đoán
Thu thập thông tin chẩn đoán sau đây rồi liên hệ với Bộ phận hỗ trợ Apigee:
- Tên tổ chức
- Tên môi trường
- Tên proxy API
- Hoàn tất lệnh curl dùng để tái tạo lỗi
- Tệp theo dõi cho các yêu cầu API
- Hoàn tất đầu ra của phản hồi từ máy chủ mục tiêu/phụ trợ cùng với kích thước của tải trọng