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 một mã trạng thái HTTP 502 Bad Gateway
với mã lỗi messaging.adaptors.http.flow.DecompressionFailureAtResponse
để phản hồi các 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 502 Bad Gateway
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":"Decompression failure at response", "detail":{ "errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse" } } }
Các nguyên nhân có thể
Lỗi này chỉ xảy ra khi:
- Phương thức mã hoá được chỉ định trong tiêu đề
Content-Encoding
của phản hồi HTTP (từ máy chủ phụ trợ/máy chủ đích) là hợp lệ và do Apigee Edge hỗ trợ, - Định dạng tải trọng do máy chủ phụ trợ/máy chủ đích gửi trong phản hồi HTTP không khớp với định dạng mã hoá được chỉ định trong tiêu đề
Content-Encoding
NHƯNG
Nguyên nhân là do Apigee Edge không giải mã được tải trọng bằng phương thức mã hoá đã chỉ định vì định dạng của tải trọng không giống với định dạng mã hoá được chỉ định trong tiêu đề Content-Encoding
.
Dưới đây là một vài ví dụ về các giá trị Content-Encoding
được hỗ trợ và đánh giá của Apigee Edge về việc biểu diễn tải trọng trong những trường hợp đó:
Trường hợp | Mã hoá nội dung | Biểu diễn tải trọng |
---|---|---|
Mã hoá đơn | gzip | Định dạng Xem phần Định dạng GZIP RFC1952. |
Mã hoá đơn | giảm âm | Định dạng này sử dụng cấu trúc |
Mã hoá nhiều lần | Mã hoá nhiều lần Ví dụ: trong trường hợp mã hoá được thực hiện hai lần, có thể là:
|
Nhiều phương thức mã hoá được áp dụng cho tải trọng theo thứ tự nhất định như khi xuất hiện trong tiêu đề. |
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 |
---|---|---|
Định dạng tải trọng phản hồi không khớp với Định dạng mã hoá nội dung | Định dạng của tải trọng phản hồi do máy chủ phụ trợ/máy chủ đích gửi đi hoặc không được mã hoá hoặc không khớp với phương thức mã hoá được chỉ định trong tiêu đề Content-Encoding . |
Người dùng Edge Public và Private Cloud |
Các bước chẩn đoán phổ biến
Hãy sử dụng một trong các công cụ/kỹ thuật sau để chẩn đoán lỗi này:
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 giao diện người dùng Apigee Edge với tư cách là một người dùng có vai trò thích hợp.
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
messaging.adaptors.http.flow.DecompressionFailureAtResponse
như minh hoạ dưới đây:Thông tin về mã lỗi
messaging.adaptors.http.flow.DecompressionFailureAtResponse
hiển thị như sau:Nhấp vào Xem nhật ký và mở rộng hàng không thành công với lỗi
502
.- Trong cửa sổ Logs (Nhật ký), hãy lưu ý những thông tin sau:
- Mã trạng thái:
502
- Nguồn lỗi:
target
- Mã lỗi:
messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
- Mã trạng thái:
- Nếu Nguồn lỗi có giá trị
target
, thì tức là định dạng tải trọng phản hồi không khớp với phương thức mã hoá được hỗ trợ được chỉ định trong tiêu đề phản hồiContent-Encoding
của máy chủ phụ trợ.
Công cụ theo dõi
Cách chẩn đoán lỗi bằng công cụ Theo dõi:
- Bật tính năng theo dõi phiên và:
- Chờ lỗi
502 Bad Gateway
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 và tái tạo
502 Bad Gateway
.
- Chờ lỗi
Đảm bảo bạn đã bật tuỳ chọn Show all FlowInfos (Hiện tất cả thông tin luồng):
- Chọn một trong các phản hồi không đạt rồi kiểm tra dấu vết.
- Di chuyển qua các giai đoạn theo dõi và xác định vị trí xảy ra lỗi.
Thường thì bạn sẽ thấy lỗi trong một luồng ngay sau giai đoạn Phản hồi nhận từ máy chủ mục tiêu, như minh hoạ dưới đây:
-
Lưu ý giá trị của các thuộc tính trong dấu vết:
- Mã hoá nội dung:
gzip
- Nội dung phản hồi:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Mã hoá nội dung:
Chuyển đến giai đoạn lỗi ngay sau giai đoạn Nhận được phản hồi từ máy chủ mục tiêu:
Lưu ý các thuộc tính:
- lỗi:
Decompression failure at response
- error.class:
com.apigee.errors.http.server.BadGateway
error.cause:
Not in GZIP format
error.cause cho biết rằng tải trọng phản hồi không ở định dạng GZIP. Điều này có nghĩa là Apigee Edge dự kiến sẽ tải trọng phản hồi ở định dạng GZIP như đã chỉ định trong tiêu đề
Content-Encoding
(xác định ở bước trước).Do đó, Apigee Edge không thể giải nén tải trọng bằng gzip và trả về lỗiDecompression failure at response
.
Xin lưu ý rằng phản hồi từ máy chủ đích/phụ trợ trong trường hợp này là
200
. Tuy nhiên, ứng dụng khách sẽ nhận được phản hồi502
vì lỗi được Apigee Edge trả về.- lỗi:
Chuyển đến giai đoạn Response Sent to Client (Phản hồi được gửi cho ứng dụng) trong dấu vết rồi nhấp vào đó.
Hãy lưu ý những thông tin chi tiết sau trong dấu vết:
- Mã trạng thái:
502 Bad Gateway
. - Nội dung lỗi:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Mã trạng thái:
Chuyển đến giai đoạn AX (Dữ liệu phân tích được ghi lại) trong dấu vết rồi nhấp vào đó.
- Di chuyển xuống mục Giai đoạn chi tiết, Tiêu đề lỗi (Error Headers) rồi xác định giá trị của X-Apigee-fault-code và X-Apigee-fault-source như sau:
- Bạn sẽ thấy các giá trị của X-Apigee-fault-code và X-Apigee-fault-source dưới dạng
messaging.adaptors.http.flow.DecompressionFailureAtResponse
vàtarget
, cho biết rằng định dạng tải trọng phản hồi không khớp với phương thức mã hoá được chỉ định trong tiêu đềContent-Encoding
.Tiêu đề phản hồi Giá trị X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
NGINX
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
502
. Kiểm tra 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 bằng giá trị thực tế.
- Tìm kiếm xem có lỗi
502
nào trong một khoảng thời gian cụ thể hay không (nếu vấn đề đã xảy ra trong quá khứ) hoặc có phản hồi nào vẫn không thành công với502
hay không. Nếu bạn tìm thấy bất kỳ lỗi
502
nào có X-Apigee-fault-code khớp với giá trị củamessaging.adaptors.http.flow.DecompressionFailureAtResponse
, thì hãy xác định giá trị của X-Apigee-fault-source.Ví dụ về lỗi 502 trong nhật ký truy cập NGINX:
Mục mẫu ở trên từ nhật ký truy cập NGINX có các giá trị sau đây cho X-Apigee-fault-code và X-Apigee-fault-code
Tiêu đề phản hồi Giá trị X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
Nguyên nhân: Định dạng tải trọng phản hồi không khớp với Mã hoá nội dung
Theo mặc định, Apigee Edge luôn giải nén tải trọng nếu tiêu đề phản hồi Content-Encoding
chứa một
phương thức mã hoá hợp lệ và được hỗ trợ. Do đó, định dạng của tải trọng phản hồi phải khớp với định dạng mã hoá được chỉ định trong tiêu đề phản hồi Content-Encoding
.
Nếu không khớp, bạn sẽ gặp lỗi này.
Chẩn đoán
- Xác định Mã lỗi và Nguồn lỗi cho lỗi phát hiện được bằng công cụ 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 Mã lỗi là
messaging.adaptors.http.flow.DecompressionFailureAtResponse
và Nguồn lỗi có giá trịtarget
, thì tức là định dạng của tải trọng phản hồi do máy chủ phụ trợ/máy chủ đích gửi không khớp với mã hoá được hỗ trợ được chỉ định trong tiêu đề phản hồiContent-Encoding
. Bạn có thể xác định trường hợp không khớp trong phản hồi HTTP bằng một trong các phương thức sau:
Thông báo lỗi
Cách xác thực bằ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
.Mẫu thông báo lỗi:
"faultstring":"Decompression failure at response"
- Trong thông báo lỗi ở trên, thông báo lỗi sẽ hiển thị
"Decompression failure at response"
, ngụ ý rằng không thể giải nén phản hồi bằng phương thức mã hoá được chỉ định trong tiêu đềContent-Encoding
.
Trace
Cách xác thực bằng Dấu vết:
- Xác định Content-Type và error.mộ bằng cách sử dụng Trace (Dấu vết) như giải thích trong phần Các bước chẩn đoán phổ biến.
Các giá trị của dấu vết mẫu như sau:
- Mã hoá nội dung:
gzip
- error.cause:
Not in GZIP format
Giá trị trong tiêu đề phản hồi Content-Encoding là gzip; tuy nhiên, tải trọng phản hồi không ở định dạng GZIP (như được chỉ định bởi error.Time). Do đó, Apigee Edge sẽ phản hồi bằng
502 Bad Gateway
và mã lỗimessaging.adaptors.http.flow.DecompressionFailureAtResponse
.- Mã hoá nội dung:
Yêu cầu thực tế
Cách xác thực bằng yêu cầu thực tế:
Nếu bạn có quyền truy cập vào yêu cầu thực tế được gửi đến ứng dụng máy chủ mục tiêu/phụ trợ, hãy thực hiện các bước sau:
- Nếu bạn là người dùng Đám mây công cộng/Đám mây riêng tư, hãy gửi yêu cầu trực tiếp đến máy chủ phụ trợ từ chính máy chủ phụ trợ hoặc bất kỳ máy nào khác mà bạn được phép gửi yêu cầu đến máy chủ phụ trợ.
- Nếu là người dùng Đám mây riêng tư, bạn cũng có thể gửi yêu cầu đến máy chủ phụ trợ qua một trong các Bộ xử lý thông báo.
- Kiểm tra phản hồi do máy chủ phụ trợ gửi và xác định giá trị được chuyển trong tiêu đề phản hồi
Content-Encoding.
- Xác định định dạng của tải trọng được gửi trong yêu cầu.
- Nếu giá trị của tiêu đề
Content-Encoding
có trong danh sách phương thức mã hoá được hỗ trợ nhưng định dạng của tải trọng phản hồi không khớp với phương thức mã hoá được chỉ định trong tiêu đềContent-Encoding
, thì đó chính là nguyên nhân của sự cố.Mẫu:
curl -v https://HOSTALIAS/test
***trimmed*** > < HTTP/1.1 200 OK < Accept-Ranges: bytes <
Content-Encoding: gzip
< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.zip Response Body(not in GZIP format)>Phản hồi mẫu ở trên sẽ gửi giá trị
gzip
đến tiêu đềContent-Encoding
. Đây là một phương thức mã hoá được hỗ trợ trong Apigee Edge. Tuy nhiên,response_payload.zip
được gửi dưới dạng tệp zip. Do đó, phản hồi này không thành công và có lỗi502 Bad Gateway
với mã lỗi:messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
Nhật ký Trình xử lý thư
Cách xác thực bằng nhật ký Trình xử lý thông báo:
Nếu là người dùng Đám mây riêng tư, bạn có thể sử dụng nhật ký Trình xử lý thư để xác định thông tin quan trọng về lỗi HTTP
502
.Kiểm tra nhật ký Bộ xử lý thư:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Tìm kiếm xem có lỗi
502
nào trong một khoảng thời gian cụ thể hay không (nếu vấn đề đã xảy ra trong quá khứ) hoặc có phản hồi nào vẫn không thành công với502
hay không. Bạn có thể sử dụng chuỗi tìm kiếm sau:grep -ri "ZipException"
Bạn sẽ thấy các dòng từ system.log tương tự như sau:
Tình huống 1
Trường hợp 1: Khi phản hồi của API có tiêu đề Content-Encoding: gzip
2021-08-02 06:50:25,433 NIOThread@2 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:10.0.115.32:41298]@38140 useCount=1 bytesRead=0 bytesWritten=203 age=469ms lastIO=0ms isOpen=true).onExceptionRead exception: {}
java.util.zip.ZipException: Not in GZIP format
---trimmed-- 2021-08-02 06:50:25,433 NIOThread@2 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:50:25,434 NIOThread@2 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@4806fdab, Not in GZIP format) 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exceptionjava.util.zip.ZipException: Not in GZIP format
occurred while writing to channel null 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: Not in GZIP formatDòng
java.util.zip.ZipException: Not in GZIP format
trong thông báo lỗi ở trên cho biết rằng tải trọng phản hồi không được gửi ở định dạng GZIP mặc dùContent-Encoding
được chỉ định là gzip. Do đó, Apigee Edge sẽ gửi trường hợp ngoại lệ và trả về một mã trạng thái502
có mã lỗimessaging.adaptors.http.flow.DecompressionFailureAtResponse
cho các ứng dụng khách.Tình huống #2
Trường hợp 2: Khi phản hồi của API có tiêu đề Content-Encoding: deflate
2021-08-02 06:35:21,215 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:192.168.194.140:35224]@36014 useCount=1 bytesRead=0 bytesWritten=202 age=439ms lastIO=2ms isOpen=true).onExceptionRead exception: {}
java.util.zip.ZipException: incorrect header check
---trimmed---- Caused by:java.util.zip.DataFormatException: incorrect header check
---trimmed--- 2021-08-02 06:35:21,215 NIOThread@0 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:35:21,216 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@3966e277, incorrect header check) 2021-08-02 06:35:21,216 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.util.zip.ZipException: incorrect header check occurred while writing to channel null 2021-08-02 06:35:21,217 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: incorrect header checkCác dòng
java.util.zip.ZipException: incorrect header check
vàCaused by: java.util.zip.DataFormatException: incorrect header check
trong thông báo lỗi ở trên cho biết tải trọng phản hồi không được gửi ở định dạng giảm phát và không khớp với phương thức mã hoá được chỉ định trong tiêu đềContent-Encoding
giảm phát. Do đó, Apigee Edge sẽ gửi trường hợp ngoại lệ này và trả về một mã trạng thái502
có mã lỗimessaging.adaptors.http.flow.DecompressionFailureAtResponse
cho các ứng dụng khách.
-
Độ phân giải
- Nếu không cần tải trọng phản hồi nén trong quy trình proxy API trong Apigee Edge và trong máy chủ phụ trợ, thì bạn không cần truyền tiêu đề
Content-Encoding
. Nếu cần nén tải trọng phản hồi, hãy chuyển sang bước 2. - Nếu cần phải nén tải trọng phản hồi, hãy đảm bảo rằng máy chủ phụ trợ luôn gửi nội dung sau:
- Bất kỳ
phương thức mã hoá được hỗ trợ nào làm giá trị cho tiêu đề
Content-Encoding
trong phản hồi - Tải trọng phản hồi ở định dạng được hỗ trợ cho Apigee Edge khớp với định dạng mã hoá được chỉ định trong tiêu đề
Content-Encoding
- Bất kỳ
phương thức mã hoá được hỗ trợ nào làm giá trị cho tiêu đề
- Trong ví dụ thảo luận ở trên, tải trọng phản hồi ở định dạng ZIP nhưng tiêu đề phản hồi chỉ định
Content-Encoding: gzip
. Bạn có thể khắc phục vấn đề này bằng cách gửi tiêu đề phản hồi dưới dạngContent-Encoding: gzip
và tải trọng phản hồi ở định dạnggzip
:curl -v https://HOSTALIAS/v1/test
> < HTTP/1.1 200 OK < Accept-Ranges: bytes <
Nếu có nhiều giá trị được chỉ định trong tiêu đềContent-Encoding: gzip
< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.gz Response Body(in GZIP format)>Content-Encoding
, thì hãy nhớ áp dụng nhiều phương thức mã hoá cho tải trọng theo cùng thứ tự xuất hiện trong tiêu đề.
Thông số kỹ thuật
Apigee Edge phản hồi bằng mã trạng thái 502 Bad Gateway
kèm mã lỗi messaging.adaptors.http.flow.DecompressionFailureAtResponse
theo các thông số RFC sau đây:
Thông số kỹ thuật |
---|
RFC 7231, mục 6.5.1 |
RFC 7231, mục 3.1.2.2 |
Nếu bạn vẫn cần Nhóm hỗ trợ Apigee hỗ trợ, hãy truy cập vào 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, sau đó liên hệ với Bộ phận hỗ trợ API 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ỗi502
- Tệp theo dõi cho các phản hồi của 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 phản hồi không thành công
- Tên môi trường
- Gói Proxy API
- Tệp theo dõi cho các phản hồi của 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