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 sẽ nhận được mã trạng thái HTTP 415 Unsupported Media Type với 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 khách nhận được mã phản hồi sau đây:

HTTP/1.1 415 Unsupported Media Type

Ngoài ra, bạn có thể thấy một 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 do ứng dụng gửi tới Apigee hoặc phản hồi HTTP do máy chủ phụ trợ gửi tới 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 phương tiện không được hỗ trợ.

Các nguyên nhân có thể dẫn đến lỗi này như sau:

Nguyên nhân Nội dung 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 chứa phương thức mã hoá không được Apigee Edge hỗ trợ. Người dùng Edge Public và Private Cloud
Dùng phương thức mã hoá không được hỗ trợ trong phản hồi Tiêu đề phản hồi của máy chủ phụ trợ Content-Encoding chứa phương thức mã hoá mà Apigee Edge không hỗ trợ. Người dùng Edge Public và Private Cloud

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 các 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 tổ chức
  3. Chuyển đến trang Phân tích > Giám sát API > Điều tra.
  4. Chọn khung thời gian cụ thể mà bạn quan sát 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 dựa trên Thời gian.
  7. Chọn một ô có mã lỗi protocol.http.UnsupportedEncoding như minh hoạ dưới đây:

    đã chọn ô mã lỗi
  8. Thông tin về mã lỗi protocol.http.UnsupportedEncoding hiện như sau:

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

  10. Trong cửa sổ Logs (Nhật ký), hãy lưu ý những thông tin sau:
    • Nguồn lỗi: Thông tin này cho biết lỗi do apigee hoặc target trả về.
    • 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 chứa phương thức mã hoá không được hỗ trợ trong tiêu đề Content-Encoding.
  12. Nếu Nguồn lỗi là target, thì phản hồi đó của máy chủ phụ trợ có chứa phương thức mã hoá 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 phiên theo dõi 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 lỗi 415 Unsupported Media Type.
  2. Đảm bảo bạn đã bật tuỳ chọn Hiển thị tất cả thông tin FlowInfos:

    ngăn tuỳ chọn khung hiển thị, hiện tất cả thông tin flow
  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 trong quá trình theo dõi và xác định vị trí xảy ra lỗi.
  5. Bạn thường sẽ thấy lỗi này trong quy trình sau giai đoạn Request sent to target server (Yêu cầu gửi đến máy chủ mục tiêu) 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". Vì lỗi được Apigee báo cáo sau khi yêu cầu được gửi đến máy chủ phụ trợ, nên có thể thấy rằng máy chủ phụ trợ đã gửi tiêu đề phản hồi Content-Encoding với giá trị "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 (Dữ liệu phân tích đã ghi lại) trong dấu vết rồi nhấp vào đó.
  8. Di chuyển xuống mục Error/ Response Headers (Tiêu đề lỗi/phản hồi) trong bảng Giai đoạn chi tiết rồi xác định giá trị của X-Apigee-fault-codeX-Apigee-fault-source như bên dưới:

  9. Bạn sẽ thấy các giá trị của X-Apigee-fault-codeX-Apigee-fault-source dưới dạng protocol.http.UnsupportedEncodingtarget. Điều này cho biết lỗi này xảy ra vì giá trị mã hoá không được hỗ trợ của "utf-8" đã được máy chủ phụ trợ truyền 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 chuỗi proxy hay không; tức là máy chủ mục tiêu/điểm cuối mục tiêu có đang gọi một proxy khác trong Apigee hay không.
    1. Để xác định điều này, hãy quay lại giai đoạn Yêu cầu gửi đến máy chủ mục tiêu. Nhấp vào Show Curl (Hiện đường cuộn).

    2. Cửa sổ Curl for Request Sent to Target Server (Curl for Request gửi tới máy chủ mục tiêu) sẽ mở ra và từ đó bạn có thể xác định bí danh của máy chủ lưu trữ đích.
    3. Nếu bí danh của máy chủ đích của máy chủ đích đang trỏ đến một bí danh của máy chủ ảo, thì đó là chuỗi proxy. Trong trường hợp này, bạn cần lặp lại tất cả các bước trên cho proxy theo chuỗi cho đến khi xác định được nguyên nhân thực sự gây ra lỗi 415 Unsupported Media Type.
    4. Nếu bí danh của máy chủ lưu trữ đích trỏ đến máy chủ phụ trợ của bạn, thì tức là máy chủ phụ trợ của bạn đang truyền phương thức 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ể dùng nhật ký truy cập NGINX để xác định thông tin chính 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 Lỗi 415 bất kỳ trong một khoảng thời gian cụ thể (nếu vấn đề đã 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 bất kỳ lỗi 415 nào trong đó X-Apigee-fault-code khớp với giá trị của protocol.http.UnsupportedEncoding, thì hãy xác định giá trị của X-Apigee-fault-code

    Ví dụ về lỗi 415 trong nhật ký truy cập NGINX:

    Mục mẫu nêu trên từ nhật ký truy cập NGINX có các giá trị sau đây dành 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 quan sát được bằng tính năng Giám sát API hoặc nhật ký truy cập NGINX như giải thích trong phần Các bước chẩn đoán thường gặp.
  2. Nếu Mã lỗiprotocol.http.UnsupportedEncodingNguồn lỗi 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 đề của 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 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 truy cập vào thông báo lỗi đầy đủ nhận được từ Apigee Edge, hãy tham khảo faultstring. faultstring chứa giá trị của mã kết thúc 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 phương thức mã hoá không được hỗ trợ là “UTF-8” như bạn 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 sẽ không thành công và có 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 mục Resolution (Giải pháp).
    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 chuyển đến tiêu đề của yêu cầu Content-Encoding.
      2. Nếu giá trị được chuyển đến tiêu đề của yêu cầu Content-Encoding không phải là một trong các giá trị được liệt kê trong mục Mã hoá được hỗ trợ, thì đó chính 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 sẽ 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à có lỗi 415 Unsupported Media Type với mã lỗi: protocol.http.UnsupportedEncoding.

Độ phân giải

  1. Hãy tham khảo danh sách phương thức mã hoá mà Apigee hỗ trợ trong phần Phương thức mã hoá được hỗ trợ.
  2. Đảm bảo rằng ứng dụng khách luôn gửi các nội dung sau:
    • Chỉ phương thức mã hoá được hỗ trợ dưới dạng 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ợ cho Apigee Edge và khớp với định dạng được 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 là 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 quan sát được bằng tính năng Giám sát API, Công cụ theo dõi hoặc nhật ký truy cập NGINX như giải thích trong phần Các bước chẩn đoán thường gặp.
  2. Nếu Nguồn lỗi có giá trị target, thì tức là 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 dưới dạng một phần của 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 truy cập vào thông báo lỗi đầy đủ mà Apigee nhận được từ Apigee, hãy tham khảo faultstring. faultstring chứa giá trị của phương thức mã hoá không được hỗ trợ.

      Mẫu thông báo lỗi:

      "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 phương thức mã hoá không được hỗ trợ là “UTF-8” như bạn 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 sẽ không thành công và có lỗi 415 Unsupported Media Type với mã lỗi: protocol.http.UnsupportedEncoding.

    Công cụ theo dõi

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

Độ phân giải

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

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

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

Đầu trang Mã hoá Nội dung mô tả
Content-Encoding gzip Định dạng Unix gzip
deflate Định dạng này sử dụng cấu trúc zlib với thuật toán nén deflate.

Thông số kỹ thuật

Apigee phản hồi bằng cách phản hồi lỗi 415 Unsupported Media Type theo thông số kỹ thuật RFC sau:

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 trong yêu cầu API, thì:
    • Bạn sẽ không thu thập được dấu vết cho những 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 do Apigee Edge gửi bằng các chính sách như RaiseFault, TransactionMessage.

    Lý do là lỗi này xảy ra ở giai đoạn đầu của Bộ xử lý thông báo trước khi có thể thực thi bất kỳ chính sách nào.

  • 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 đề phản hồi từ máy chủ phụ trợ, thì phải khắc phục 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 vấn đề này.

Nếu bạn vẫn cần Nhóm hỗ trợApigee Edge hỗ trợ, hãy chuyển đến phần 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 Nhóm hỗ trợ Apigee hỗ trợ, hãy thu thập thông tin chẩn đoán sau đây rồi liên hệ với Nhóm hỗ trợ Apigee:

Nếu bạn là người dùng Public Cloud, 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 tạo 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 những thông tin sau:

  • Đã phát hiệ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ành công
  • 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

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

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