Lỗi không xác định trong bảng điều khiển API thử này

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:

thông báo lỗi chung, nhấp vào để xem hình ảnh lớn hơn thông báo lỗi chung

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

  1. 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.
  2. Đố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.
  3. 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.
    1. 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.
    2. 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ỗi Unknown 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 lỗi, nhấp để xem hình ảnh lớn hơn ví dụ về thông báo lỗi

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:

ví dụ về thông báo thành công, nhấp để xem hình ảnh lớn hơn ví dụ về thông báo thành công

Độ phân giải

  1. 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.
  2. Đô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

  1. Kiểm tra giá trị của tiêu đề Access-Control-Allow-Origin trong phiên theo dõi.
  2. 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.
  3. 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.
  4. Đ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ụ về nhiều giá trị được sử dụng, nhấp để xem hình ảnh lớn hơn ví dụ về sử dụng nhiều giá trị

Ví dụ: Access-Control-Allow-Origin bằng với *:

ví dụ về một giá trị duy nhất được sử dụng, nhấp để xem hình ảnh lớn hơn ví dụ về một giá trị duy nhất được sử dụng

Ví dụ về cách sử dụng <Add>:

ví dụ: sử dụng Thêm, nhấp để xem hình ảnh lớn hơn ví dụ về cách sử dụng tính năng Thêm

Ví dụ về cách sử dụng <Set>:

ví dụ: dùng Đặt, nhấp để xem hình ảnh lớn hơn ví dụ về cách sử dụng Set

Độ phân giải

  1. 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.
  2. 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