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:
- Đăng nhập vào tài khoản Apigee Edge.
Chuyển sang tổ chức mà bạn muốn điều tra vấn đề:
- Chuyển đến trang Phân tích > Giám sát API > Điều tra.
- Chọn khung thời gian cụ thể mà bạn quan sát thấy lỗi.
- Đảm bảo rằng bộ lọc Proxy được đặt thành Tất cả.
- Vẽ Mã lỗi dựa trên Thời gian.
Chọn một ô có mã lỗi
protocol.http.UnsupportedEncoding
như minh hoạ dưới đây:Thông tin về mã lỗi
protocol.http.UnsupportedEncoding
hiện như sau: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:- 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ặctarget
trả về. - Mã lỗi: Mã này phải khớp với
protocol.http.UnsupportedEncoding
.
- Nguồn lỗi: Thông tin này cho biết lỗi do
- Nếu Nguồn lỗi là
apigee
, 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
. - 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:
- 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
.
- Chờ lỗi
Đảm bảo bạn đã bật tuỳ chọn Hiển thị tất cả thông tin FlowInfos:
- 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.
- 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.
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:
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ồiContent-Encoding
với giá trị"utf-8"
. Đây không phải là phương thức mã hoá được hỗ trợ trong Apigee.- 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 đó.
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-code và X-Apigee-fault-source như bên dưới:
Bạn sẽ thấy các giá trị của X-Apigee-fault-code và X-Apigee-fault-source dưới dạng
protocol.http.UnsupportedEncoding
vàtarget
. Đ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ồiContent-Encoding
.Tiêu đề phản hồi Giá trị X-Apigee-fault-code protocol.http.UnsupportedEncoding
X-Apigee-fault-source target
- 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.
Để 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).
- 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.
- 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
. - 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:
- 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
. Kiểm tra nhật ký truy cập NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- 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ới415
. 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ủaprotocol.http.UnsupportedEncoding
, thì hãy xác định giá trị của X-Apigee-fault-codeVí 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-code và X-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
- Xác định Mã lỗi và Nguồ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.
- Nếu Mã lỗi là
protocol.http.UnsupportedEncoding
và Nguồn lỗi có giá trịapigee
hoặcMP
, 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ầuContent-Encoding
. - 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: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\""
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 trongfaultstring
.Vì
“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ỗi415 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ế:- 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).
- 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:
- Xác định giá trị được chuyển đến tiêu đề của yêu cầu
Content-Encoding.
- 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ỗi415 Unsupported Media Type
với mã lỗi:protocol.http.UnsupportedEncoding
.
- Xác định giá trị được chuyển đến tiêu đề của yêu cầu
Độ phân giải
- 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ợ.
- Đả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
- Chỉ phương thức mã hoá được hỗ trợ dưới dạng giá trị cho tiêu đề
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ạngContent-Encoding: gzip
và tải trọng yêu cầu ở định dạnggzip
: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
- Xác định Mã lỗi và Nguồ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.
- 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
. - 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: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\""
-
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 trongfaultstring
.Vì
“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ỗi415 Unsupported Media Type
với mã lỗi:protocol.http.UnsupportedEncoding
.
Công cụ theo dõi
Sử dụng Dấu vết:- 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.
- 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
- 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ợ
- Đả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
- Chỉ sử dụng phương thức mã hoá được hỗ trợ làm giá trị cho tiêu đề
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ỗi415
- 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, ENV và PORT# đượ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