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

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

  1. 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.
  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 quy trình proxy.
  3. 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.
    1. 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.
    2. 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ới Unknown 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 lỗi, 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 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:

ví dụ về thông báo thành công, hãy 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 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.
  2. Đô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

  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 đặ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.
  3. 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.
  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ụ về Access-Control-Allow-Origin bằng *,*:

ví dụ về nhiều giá trị được sử dụng, hãy nhấp để xem hình ảnh lớn hơn ví dụ về nhiều giá trị được sử dụng

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

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

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

ví dụ sử dụng nút Thêm, nhấp để xem hình ảnh lớn hơn ví dụ Sử dụng Add

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

ví dụ sử dụng Set, nhấp để xem hình ảnh lớn hơn ví dụ sử dụng Set

Độ phân giải

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