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 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:

thông báo lỗi chung, nhấp để 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 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

  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 là 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ó continueOnError="false" có thực hiện được không và có phát sinh lỗi hay không.
    1. 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.
    2. 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ới Unknown 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:

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

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:

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

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

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

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

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

ví dụ về 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ụ: sử dụng nút Đặt, nhấp để xem hình ảnh lớn hơn ví dụ về cách sử dụng Đặt

Độ phân giải

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