Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu Apigee X. thông tin
Dấu hiệu
Lệnh gọi API từ cổng thông tin cho nhà phát triển tích hợp không thành công với Unknown Error hoặc một phản hồi trống trong bảng 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 cho 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.
Sau đây là thông báo lỗi chung xuất hiện trên Công cụ cho nhà phát triển > thẻ Bảng điều khiển:
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 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 Add (Thêm) thay vì Set (Đặt) trong Assign Message Policy (Chỉ định chính sách về tin nhắn). | 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 bạn dự kiến nhận được 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 quy trình proxy.
-
Theo dõi yêu cầu và kiểm tra xem có chính sách nào có
continueOnError="false"đang gặp lỗi và gây ra sự cố hay không. - Nếu có, hãy xác minh xem chính sách CORS AssignMessage có được thực thi hay không trong quy trình phản hồi lỗi.
- Nếu không, thì đó là nguyên nhân gây ra vấn đề này.
Lý do là khi bất kỳ chính sách nào có phần tửcontinueOnError="false"không thành công, thì yêu cầu sẽ chuyển sang quy trình phản hồi lỗi. Nếu không có quy trình xử lý lỗi rõ ràng 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 lại. 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 nhà phát triển tích hợp sẽ không thành công vớiUnknown error.
Ảnh chụp màn hình sau đây cho thấy một ví dụ về thông báo lỗi và một ví dụ 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 Try this API (Dùng thử API này) của cổng tích hợp và trong cửa sổ Trace (Dấu vết) của proxy:
Ví dụ về thông báo thành công trong bảng điều khiển Dùng thử API này của cổng tích hợp và trong cửa sổ Dấu vết của 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 một quy tắc lỗi để xử lý phản hồi lỗi. Thêm một chính sách CORS AssignMessage 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 đó, bạn có thể triển khai quy tắc lỗi mặc định để thực thi chính sách CORS AssignMessage:
<?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 đặt một giá trị duy nhất. Việc thiết lập nhiều giá trị có thể gây ra vấn đề về CORS và cổng thông tin 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:
*,*thì có nghĩa là cả máy chủ đích và chính sách CORS AssignMessage đều đang đặt giá trị của tiêu đề này. - Điều này có thể xảy ra khi người dùng đã sử dụng
<Add> elementcho 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ụ về Access-Control-Allow-Origin bằng *,*:
Ví dụ về 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
- Phương pháp được đề xuất là sử dụng
<Set> element(thay vì<Add> element) cho Access-Control-Allow-Origin vì chỉ được phép có một giá trị duy nhất. - Ngoài ra, hãy đặt tiêu đề Access-Control-Allow-Origin ở một nơi duy nhất; có thể là chính sách CORS AssignMessage hoặc máy chủ đích.
<?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 được Nhóm hỗ trợ Apigee trợ giúp, hãy xem phần Thông tin chẩn đoán cần thu thập.
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 Nhóm hỗ trợ Apigee Edge:
- Tên tổ chức
- Tên môi trường
- Tên API Proxy
- Lệnh curl hoàn chỉnh được 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ủ đích/phụ trợ cùng với kích thước của tải trọng