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 dành cho nhà phát triển tích hợp không thành công với
Unknown Error
hoặc phản hồi trống trong
Dùng thử API này
bảng điều khiển.
Thông báo lỗi
Bạn có thể thấy phản hồi trống hoặc thông báo lỗi sau đây đối với API trong cổng tích hợp:
Unknown Error
Trên Công cụ dành cho nhà phát triển > Console, bạn sẽ thấy những nội dung sau đây lỗi:
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.
Một thông báo lỗi chung như trên Công cụ dành cho nhà phát triển > Bảng điều khiển như sau:
Các nguyên nhân có thể
Nguyên nhân | Mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
---|---|---|
Lỗi chính sách chưa được xử lý | Phản hồi lỗi mặc định được gửi mà không có tiêu đề CORS khi có chính sách không thành công trong luồng 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 | Dùng thao tác Thêm thay vì Đặt trong chính sách Gán thông báo. | Người dùng Edge Public Cloud |
Nguyên nhân: Lỗi chính sách chưa đượ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
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ó áp dụng hay không
continueOnError="false"
không thành công và đang báo lỗi. - Nếu có, hãy xác minh xem Đã thực thi chính sách ApplyMessage CORS hoặc không gặp lỗi quy trình phản hồi.
- Nếu không thì đó là nguyên nhân của vấn đề này.
Nguyên nhân là khi bất kỳ chính sách nào có phần tửcontinueOnError="false"
không thành công, sau đó yêu cầu sẽ nhập quy trình phản hồi lỗi. Nếu không có bất kỳ cách xử lý lỗi rõ ràng nào trong luồng phản hồi lỗi, thì phản hồi lỗi mặc định tương ứng đối với chính sách sẽ được gửi lại. Phản hồi lỗi này không có bất kỳ Tiêu đề CORS. Do đó, lệnh gọi API từ nhà phát triển được tích hợp cổng thông tin bị lỗiUnknown error
.
Các ảnh chụp màn hình sau đây cho thấy ví dụ về thông báo lỗi và thông báo thành công.
Ví dụ về thông báo lỗi trong bảng điều khiển Dùng thử API này trong cổng thông tin tích hợp và trong cửa sổ Trace của proxy:
Ví dụ về thông báo thành công trong cổng thông tin tích hợp trong bảng điều khiển Dùng thử API này và trong cửa sổ Trace của proxy:
Độ phân giải
- Thay vì dựa vào thông báo lỗi mặc định, quy tắc lỗi phải được triển khai để xử lý phản hồi lỗi. Bao gồm Chính sáchChỉ định CORS (Chia sẻ tài nguyên giữa nhiều nguồn gốc) với các tiêu đề thích hợp và gọi chính sách đó trong FaultRule.
- Đôi khi, bạn không thể xác định 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ách ThinkMessage 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 phiên theo dõi.
- Tiêu đề Access-Control-Allow-Origin chỉ cho phép một giá trị duy nhất cần thiết lập. 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 đang trong dấu vết
trông giống như:
*,*
có nghĩa là cả máy chủ mục tiêu và đặt giá trị cho chính sách CORS (Chia sẻ tài nguyên giữa nhiều nguồn gốc) của chính sách này. - Điều này có thể xảy ra khi người dùng đã sử dụng
<Add> element
cho 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ới *,*
:
Ví dụ: Access-Control-Allow-Origin bằng với *
:
Ví dụ về cách sử dụng <Add>
:
Ví dụ về cách sử dụng <Set>
:
Độ phân giải
- Phương pháp đề xuất là sử dụng
<Set> element
(thay vì<Add> element
) cho Access-Control-Allow-Origin dưới dạng chỉ được phép sử dụng một giá trị duy nhất. - Ngoài ra, chỉ đặt tiêu đề Access-Control-Allow-Origin trong một nơi; hoặc Gán chính sách CORS (Chia sẻ tài nguyên giữa nhiều nguồn gốc) của tin nhắn 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 hỗ trợ từ Nhóm hỗ trợ Apigee, hãy truy cập vào 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 Hỗ trợ Apigee Edge:
- Tên tổ chức
- Tên môi trường
- Tên proxy API
- Hoàn tất lệnh curl được dùng để tái hiện lỗi
- Tệp theo dõi cho các yêu cầu API
- Hoàn thành đầu ra phản hồi từ máy chủ đích/máy chủ phụ trợ cùng với kích thước của tải trọng