415 Loại phương tiện không được hỗ trợ - Mã hóa không được hỗ trợ

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

Ứng dụng khách sẽ nhận được mã trạng thái HTTP 415 Unsupported Media Type kèm theo mã lỗi protocol.http.UnsupportedEncoding làm phản hồi cho lệnh gọi API.

Thông báo lỗi

Ứng dụng sẽ nhận được mã phản hồi sau đây:

HTTP/1.1 415 Unsupported Media Type

Ngoài ra, bạn có thể nhận thấy thông báo lỗi tương tự như thông báo dưới đây:

{
   "fault":{
      "faultstring":"Unsupported Encoding \"UTF-8\"",
      "detail":{
         "errorcode":"protocol.http.UnsupportedEncoding"
      }
   }
}

Các nguyên nhân có thể

Lỗi này xảy ra nếu giá trị của tiêu đề Content-Encoding được chỉ định trong yêu cầu HTTP mà ứng dụng gửi đến Apigee hoặc phản hồi HTTP do máy chủ phụ trợ gửi đến Apigee không chứa phương thức mã hoá mà Apigee hỗ trợ, theo thông số kỹ thuật RFC 7231, mục 6.5.13: 415 Loại nội dung nghe nhìn không được hỗ trợ.

Sau đây là các nguyên nhân có thể gây ra lỗi này:

Nguyên nhân Mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Sử dụng phương thức mã hoá không được hỗ trợ trong yêu cầu Tiêu đề của yêu cầu Content-Encoding có chứa phương thức mã hoá không được hỗ trợ của Apigee Edge. Người dùng Edge công khai và riêng tư
Sử dụng phương thức mã hoá không được hỗ trợ để phản hồi Tiêu đề phản hồi Content-Encoding của máy chủ phụ trợ có chứa phương thức mã hoá Không được Apigee Edge hỗ trợ. Người dùng Edge công khai và riêng tư

Các bước chẩn đoán phổ biến

Để chẩn đoán lỗi, bạn có thể sử dụng một trong những phương pháp sau:

Giám sát API

Cách chẩn đoán lỗi bằng tính năng Giám sát API:

  1. Đăng nhập vào tài khoản Apigee Edge.
  2. Chuyển sang tổ chức mà bạn muốn điều tra vấn đề:

    trình đơn thả xuống giao diện người dùng của tổ chức
  3. Chuyển đến thẻ Analyze (Phân tích) > Giám sát API > Điều tra.
  4. Chọn khung thời gian cụ thể mà bạn phát hiện thấy lỗi.
  5. Đảm bảo rằng bộ lọc Proxy được đặt thành Tất cả.
  6. Vẽ Mã lỗi theo Thời gian.
  7. Chọn một ô có mã lỗi protocol.http.UnsupportedEncoding như hình bên dưới:

    đã chọn ô chứa mã lỗi
  8. Thông tin về mã lỗi protocol.http.UnsupportedEncoding được hiển thị như sau:

  9. Nhấp vào Xem nhật ký và mở rộng một trong những yêu cầu không thành công với 415 lỗi để xem thêm thông tin:

  10. Từ cửa sổ Logs (Nhật ký), hãy lưu ý những thông tin chi tiết sau:
    • Nguồn lỗi: Cột này cho biết lỗi do apigee trả về hoặc target.
    • Mã lỗi: Mã này phải khớp với protocol.http.UnsupportedEncoding.
  11. Nếu Nguồn lỗiapigee, thì điều đó cho biết rằng yêu cầu có chứa chế độ mã hoá không được hỗ trợ trong tiêu đề Content-Encoding.
  12. Nếu Nguồn lỗi là target, thì điều đó cho biết rằng máy chủ phụ trợ phản hồi chứa mã hóa không được hỗ trợ trong tiêu đề Content-Encoding.

Công cụ theo dõi

Cách chẩn đoán lỗi bằng công cụ Theo dõi:

  1. Bật theo dõi phiên hoạt động và:
    • Chờ lỗi 415 Unsupported Media Type xảy ra, hoặc
    • Nếu bạn có thể tái hiện vấn đề, hãy thực hiện lệnh gọi API để tái hiện 415 Unsupported Media Type lỗi.
  2. Đảm bảo rằng bạn đã bật tuỳ chọn Show all FlowInfos (Hiện tất cả FlowInfos):

    ngăn chế độ xem, hiện tất cả thông tin luồng
  3. Chọn một trong các yêu cầu không thành công rồi kiểm tra dấu vết.
  4. Di chuyển qua các giai đoạn của quá trình theo dõi và xác định nơi xảy ra lỗi.
  5. Thông thường, bạn sẽ thấy lỗi này trong một luồng sau khi Yêu cầu được gửi đến mục tiêu máy chủ như minh hoạ dưới đây:

  6. Ghi lại giá trị của lỗi trong dấu vết.

    Dấu vết mẫu ở trên cho thấy lỗi là Unsupported Encoding "utf-8". Từ lỗi do Apigee đưa ra sau khi yêu cầu được gửi đến máy chủ phụ trợ. Điều này cho biết rằng máy chủ phụ trợ đã gửi tiêu đề phản hồi Content-Encoding kèm theo giá trị của "utf-8", đây không phải là phương thức mã hoá được hỗ trợ trong Apigee.

  7. Chuyển đến Giai đoạn AX (Đã ghi dữ liệu Analytics) trong dấu vết và nhấp vào đó.
  8. Cuộn xuống phần Tiêu đề lỗi / phản hồi trong Chi tiết giai đoạn bảng điều khiển và xác định các giá trị của X-Apigee-fault-codeX-Apigee-fault-source như sau:

  9. Bạn sẽ thấy các giá trị của X-Apigee-fault-codeX-Apigee-fault-sourceprotocol.http.UnsupportedEncodingtarget, cho biết rằng do giá trị mã hoá không được hỗ trợ của "utf-8" đã được truyền bởi giá trị máy chủ phụ trợ trong tiêu đề phản hồi Content-Encoding.

    Tiêu đề phản hồi Giá trị
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

  10. Kiểm tra xem bạn có đang sử dụng tạo chuỗi proxy; tức là nếu máy chủ mục tiêu/điểm cuối mục tiêu gọi một proxy trong Apigee.
    1. Để xác định điều này, hãy quay lại giai đoạn Đã gửi yêu cầu đến máy chủ mục tiêu. Nhấp vào Hiển thị cuộn tròn.

    2. Cửa sổ Curl for Yêu cầu được gửi tới máy chủ mục tiêu sẽ mở ra để từ đó bạn có thể xác định bí danh máy chủ lưu trữ của máy chủ mục tiêu.
    3. Nếu bí danh máy chủ lưu trữ của máy chủ mục tiêu đang trỏ tới bí danh máy chủ lưu trữ ảo, thì đó là proxy tạo chuỗi. Trong trường hợp này, bạn cần phải lặp lại tất cả các bước trên cho proxy theo chuỗi cho đến khi bạn sẽ xác định nguyên nhân thực sự gây ra lỗi 415 Unsupported Media Type.
    4. Nếu bí danh máy chủ lưu trữ của máy chủ mục tiêu trỏ đến máy chủ phụ trợ của bạn, thì điều đó cho biết rằng máy chủ phụ trợ của bạn đang truyền mã hoá không được hỗ trợ đến Apigee.

Nhật ký truy cập Nginix

Cách chẩn đoán lỗi bằng nhật ký truy cập NGINX:

  1. Nếu là người dùng Đám mây riêng tư, bạn có thể sử dụng nhật ký truy cập NGINX để xác định thông tin quan trọng về lỗi HTTP 415.
  2. Kiểm tra nhật ký truy cập NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. Tìm kiếm mọi Lỗi 415 trong một khoảng thời gian cụ thể (nếu sự cố đã xảy ra trước đây) hoặc nếu có bất kỳ yêu cầu nào vẫn không thành công với 415.
  4. Nếu bạn tìm thấy lỗi 415 khi so khớp X-Apigee-fault-code giá trị của protocol.http.UnsupportedEncoding, sau đó xác định giá trị của X-Apigee-fault-source.

    Lỗi 415 mẫu trong nhật ký truy cập NGINX:

    Mục nhập mẫu ở trên từ nhật ký truy cập NGINX có các giá trị sau cho X- Apigee-fault-codeX-Apigee-fault-source:

    Tiêu đề phản hồi Giá trị
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source MP

    X-Apigee-fault-source cũng có thể cóX-Apigee-fault-source giá trịX-Apigee-fault-source

Nguyên nhân: Phương thức mã hoá không được hỗ trợ trong yêu cầu

Chẩn đoán

  1. Xác định Mã lỗiNguồn lỗi cho lỗi phát hiện được bằng API Giám sát hoặc nhật ký truy cập NGINX như được giải thích trong Các bước chẩn đoán phổ biến.
  2. Nếu Mã lỗiprotocol.http.UnsupportedEncodingLỗi Nguồn có giá trị apigee hoặc MP, thì điều này cho biết rằng yêu cầu do ứng dụng gửi chứa phương thức mã hoá không được hỗ trợ trong tiêu đề yêu cầu Content-Encoding.
  3. Bạn có thể xác định giá trị của phương thức mã hoá không được hỗ trợ được truyền trong yêu cầu HTTP bằng một trong các phương pháp sau:

    Thông báo lỗi

    Sử dụng thông báo lỗi:
    1. Nếu bạn có thể xem thông báo lỗi đầy đủ mà Apigee Edge gửi đến, hãy tham khảo vào faultstring. faultstring chứa giá trị của thuộc tính không được hỗ trợ mã kết thúc.

      Thông báo lỗi mẫu:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. Trong thông báo lỗi ở trên, hãy lưu ý rằng giá trị của kiểu mã hoá không được hỗ trợ là “UTF-8” như được thấy trong faultstring.

      “UTF-8” không phải là phương thức mã hoá được hỗ trợ trong Apigee Edge, nên yêu cầu này không thành công với lỗi 415 Unsupported Media Type với mã lỗi: protocol.http.UnsupportedEncoding.

    Yêu cầu thực tế

    Sử dụng yêu cầu thực tế:
    1. Nếu bạn không có quyền truy cập vào yêu cầu thực tế do ứng dụng đưa ra, hãy chuyển đến Độ phân giải.
    2. Nếu bạn có quyền truy cập vào yêu cầu thực tế do ứng dụng đưa ra, hãy thực hiện các bước sau:
      1. Xác định giá trị được truyền đến tiêu đề của yêu cầu Content-Encoding.
      2. Nếu giá trị được truyền đến tiêu đề của yêu cầu Content-Encoding không phải là một của các giá trị được liệt kê trong phần Mã hóa được hỗ trợ, thì đó là nguyên nhân gây ra lỗi này.

        Yêu cầu mẫu:

        curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: UTF-8" -X POST -d @request_payload.gz

        Yêu cầu mẫu ở trên gửi giá trị "UTF-8" đến tiêu đề Content- Encoding. Tiêu đề này không phải là Phương thức mã hoá được hỗ trợ trong Apigee Edge. Do đó, yêu cầu này không thành công với lỗi 415 Unsupported Media Type kèm theo mã lỗi: protocol.http.UnsupportedEncoding

Độ phân giải

  1. Bạn có thể tham khảo danh sách mã hoá mà Apigee hỗ trợ trong Chế độ mã hoá được hỗ trợ.
  2. Hãy đảm bảo rằng ứng dụng luôn gửi các thông tin sau:
    • Chỉ phương thức mã hoá được hỗ trợ mới là giá trị cho tiêu đề Content-Encoding trong yêu cầu
    • Tải trọng yêu cầu ở định dạng được hỗ trợ sang Apigee Edge và khớp với định dạng đã chỉ định trong tiêu đề Content-Encoding
  3. Trong ví dụ trên, tải trọng yêu cầu có phần mở rộng gz cho biết nội dung phải gzip. Bạn có thể khắc phục vấn đề này bằng cách gửi tiêu đề của yêu cầu dưới dạng Content-Encoding: gzip và tải trọng yêu cầu ở định dạng gzip:

    curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
    

Nguyên nhân: Phương thức mã hoá không được hỗ trợ trong phản hồi

Chẩn đoán

  1. Xác định Mã lỗiNguồn lỗi cho lỗi phát hiện được bằng API Nhật ký giám sát, Công cụ theo dõi hoặc nhật ký truy cập NGINX như giải thích trong Các bước chẩn đoán thường gặp.
  2. Nếu Nguồn lỗi có giá trị target, thì điều này cho biết rằng phản hồi do máy chủ phụ trợ gửi có chứa phương thức mã hoá không được hỗ trợ trong Tiêu đề Content-Encoding.
  3. Bạn có thể xác định giá trị của phương thức mã hoá không được hỗ trợ được truyền trong phản hồi HTTP từ máy chủ phụ trợ bằng một trong các phương thức sau:

    Thông báo lỗi

    Sử dụng thông báo lỗi:
    1. Nếu bạn có quyền xem thông báo lỗi hoàn chỉnh nhận được từ Apigee Edge, thì tham khảo faultstring. faultstring chứa giá trị của mã hoá không được hỗ trợ.

      Thông báo lỗi mẫu:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. Trong thông báo lỗi ở trên, hãy lưu ý rằng giá trị của kiểu mã hoá không được hỗ trợ là “UTF-8” như được thấy trong faultstring.

      “UTF-8” không phải là phương thức mã hoá được hỗ trợ trong Apigee Edge, nên mã này yêu cầu không thành công với 415 Unsupported Media Type lỗi cùng với mã lỗi: protocol.http.UnsupportedEncoding.

    Công cụ theo dõi

    Sử dụng công cụ Theo dõi:
    1. Nếu bạn không có dấu vết của yêu cầu không thành công, hãy truy cập Độ phân giải.
    2. Nếu đã ghi lại dấu vết lỗi, bạn có thể xác định các lỗi mã hoá do máy chủ phụ trợ truyền như một phần của phản hồi Content-Encoding như được giải thích trong công cụ Theo dõi.

Độ phân giải

  1. Bạn có thể tham khảo danh sách mã hoá mà Apigee hỗ trợ trong Phương thức mã hoá được hỗ trợ
  2. Đảm bảo rằng máy chủ phụ trợ luôn gửi nội dung sau:
    • Chỉ phương thức mã hoá được hỗ trợ làm giá trị cho thuộc tính Tiêu đề Content-Encoding trong yêu cầu
    • Tải trọng phản hồi ở định dạng được hỗ trợ đến Apigee Edge và khớp với định dạng đã chỉ định trong tiêu đề Content-Encoding

Phương thức mã hoá được hỗ trợ

Bảng sau đây liệt kê định dạng mã hoá mà Apigee Edge hỗ trợ:

Tiêu đề Mã hoá Mô tả
Content-Encoding gzip Định dạng gzip của Unix
deflate Định dạng này sử dụng cấu trúc zlib với thuật toán nén giảm bớt.

Thông số kỹ thuật

Apigee phản hồi bằng phản hồi lỗi 415 Unsupported Media Type theo thông số RFC sau đây:

Thông số kỹ thuật
RFC 7231, mục 6.5.13: 415 Loại nội dung nghe nhìn không được hỗ trợ

Các điểm chính cần lưu ý

Xin lưu ý những điều sau:

  • Nếu Apigee trả về lỗi 415 do phương thức mã hoá không được hỗ trợ được truyền vào tiêu đề Content-Encoding như một phần của yêu cầu API, sau đó:
    • Bạn sẽ không thể ghi lại dấu vết cho các yêu cầu như vậy.
    • Bạn sẽ không thể sửa đổi định dạng hoặc nội dung của phản hồi lỗi được gửi bởi Apigee Edge bằng các chính sách như RaiseFault, assignedMessage.

    Điều này là do lỗi này xảy ra ở giai đoạn đầu trong Trình xử lý thông báo trước khi thực thi được chính sách.

  • Nếu Apigee trả về lỗi 415 do phương thức mã hoá không được hỗ trợ thì truyền trong tiêu đề phản hồi từ máy chủ phụ trợ, thì bạn phải khắc phục vấn đề này trong máy chủ phụ trợ để tránh lỗi này. Vui lòng làm việc với nhóm phụ trợ của bạn khi thích hợp để khắc phục sự cố này.

Nếu bạn vẫn cần trợ giúp từ Bộ phận hỗ trợ Apigee Edge, hãy chuyển đến mục Phải thu thập thông tin chẩn đoán.

Phải thu thập thông tin chẩn đoán

Nếu bạn vẫn cần hỗ trợ từ Nhóm hỗ trợ Apigee, hãy thu thập những thông tin sau thông tin chẩn đoán rồi liên hệ với Bộ phận hỗ trợ Apigee Edge:

Nếu bạn là người dùng Cloud Public, hãy cung cấp những thông tin sau:

  • 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 hiện lỗi 415
  • Tệp theo dõi cho các yêu cầu API

Nếu bạn là người dùng Đám mây riêng tư, hãy cung cấp các thông tin sau:

  • Đã nhận thấy thông báo lỗi hoàn chỉnh đối với các yêu cầu không thực hiện được
  • Tên môi trường
  • Gói Proxy API
  • Tệp theo dõi cho các yêu cầu API
  • Nhật ký truy cập NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Vị trí: ORG, ENVPORT# được thay thế bằng giá trị thực tế.

  • Nhật ký hệ thống của Trình xử lý thư /opt/apigee/var/log/edge-message- processor/logs/system.log