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 431 Request Header Fields Too
Large
với mã lỗi protocol.http.TooBigHeaders
làm phản hồi cho API
cuộc gọi.
Thông báo lỗi
Ứng dụng sẽ nhận được mã phản hồi sau đây:
HTTP/1.1 431 Request Header Fields Too Large
Ngoài ra, bạn có thể nhận thấy thông báo lỗi sau:
{ "fault":{ "faultstring":"request headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
Các nguyên nhân có thể
Lỗi này xảy ra nếu tổng kích thước của tất cả các tiêu đề yêu cầu do ứng dụng khách gửi tới Apigee Edge trong yêu cầu HTTP lớn hơn giới hạn được phép trong Apigee Edge theo RFC 6585, mục 5: 431 Yêu cầu trường tiêu đề quá lớn.
Dưới đây là những 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 |
---|---|---|
Kích thước tiêu đề yêu cầu lớn hơn giới hạn cho phép | Tổng kích thước của tất cả tiêu đề mà ứng dụng gửi đi như một phần của yêu cầu HTTP tới Apigee Edge vượt quá giới hạn được phép trong Apigee Edge. | Người dùng Edge công khai và riêng tư |
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à 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 đề này.
- Chuyển đến thẻ Analyze (Phân tích) > Giám sát API > Điều tra.
- Chọn khung thời gian cụ thể mà bạn phát hiện thấy lỗi.
- Vẽ Mã lỗi theo Thời gian.
- Chọn một ô có mã lỗi
protocol.http.TooBigHeaders
và mã trạng thái431
như được hiển thị dưới đây: Bạn sẽ thấy thông tin về mã lỗi
protocol.http.TooBigHeaders
như minh hoạ dưới đây:Nhấp vào Xem nhật ký rồi mở rộng hàng chứa yêu cầu không thành công:
Từ cửa sổ Logs (Nhật ký), hãy lưu ý những thông tin chi tiết sau:
- Mã trạng thái:
431
- Nguồn lỗi:
apigee
- Mã lỗi:
protocol.http.TooBigHeaders
. - Độ dài yêu cầu(byte):
32150 (> 25 KB)
- Mã trạng thái:
- Nếu Nguồn lỗi có giá trị
apigee
hoặcMP
, thì Mã lỗi có giá trịprotocol.http.TooBigHeaders
và Độ dài yêu cầu lớn hơn 25 KB thì điều đó cho biết rằng tổng kích thước của tất cả tiêu đề của yêu cầu do ứng dụng gửi đi như một phần của yêu cầu HTTP lớn hơn so với giới hạn được phép trong Apigee.
Công cụ theo dõi
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ể sử dụng nhật ký truy cập NGINX để
xác định thông tin chính về lỗi HTTP
431
. 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 thế bằng các giá trị thực tế.
- Tìm kiếm để xem có lỗi
431
nào trong một khoảng thời gian cụ thể hay không (nếu sự cố đã xảy ra trong quá khứ) hoặc nếu có bất kỳ yêu cầu nào vẫn không thành công với431
. Nếu bạn tìm thấy bất kỳ lỗi
431
nào với mã X-Apigee-fault-code khớp với giá trị củaprotocol.http.TooBigHeaders
, sau đó xác định giá trị của X-Apigee-fault-source.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-code và X-Apigee-fault-code
Tiêu đề phản hồi Giá trị X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source MP
Lưu ý: Độ dài yêu cầu:
40159
(40 KB lớn hơn 25 KB, giới hạn cho phép đối với tiêu đề của yêu cầu trong Apigee Edge)Trong mục nhập nhật ký mẫu ở trên, X-Apigee-fault-source có giá trị
apigee
hoặcMP
, X-Apigee-fault-code sẽ có giá trịprotocol.http.TooBigHeaders
và Thời lượng yêu cầu là 40 KB, tức là lớn hơn giới hạn cho phép trong Apigee – 25 KB. Điều này thể hiện rõ rằng tổng kích thước của tất cả tiêu đề yêu cầu do ứng dụng gửi đi như một phần của HTTP yêu cầu đã vượt quá giới hạn cho phép là 25 KB trên Apigee Edge.
Nguyên nhân: Kích thước tiêu đề của yêu cầu lớn hơn giới hạn cho phép
Chẩn đoán
- Xác định Mã lỗi, Nguồn lỗi và kích thước độ dài yêu cầu cho đoạn mã phát hiện thấy lỗi khi sử dụng nhật ký Giám sát API hoặc nhật ký Truy cập NGINX như được giải thích trong Các bước chẩn đoán thường gặp.
- Nếu Nguồn lỗi có giá trị
apigee
hoặcMP
, Mã lỗi có giá trịprotocol.http.TooBigHeaders
, và Thời lượng yêu cầu lớn hơn 25 KB, thì thời lượng này cho biết kích thước yêu cầu mà ứng dụng gửi tới Apigee lớn hơn giới hạn được phép trong Apigee Edge. - Bạn có thể xác thực rằng kích thước tiêu đề yêu cầu đã vượt quá giới hạn cho phép là 25 KB bằng cách sử dụ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 xem thông báo lỗi hoàn chỉnh nhận được từ Apigee Edge, thì tham khảo
faultstring
.faultstring
cho biết rằng tổng kích thước của Tiêu đề yêu cầu đã vượt quá giới hạn cho phép là 25 KB.Thông báo lỗi mẫu:
"faultstring":"request headers size exceeding 25,600"
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ế do ứng dụng đưa ra, thì hãy thực hiện các bước sau:
- Xác minh kích thước của các tiêu đề được truyền trong yêu cầu.
Nếu bạn thấy rằng tổng kích thước của các tiêu đề lớn hơn giới hạn được phép trong Apigee Edge, tức là nguyên nhân của vấn đề.
Yêu cầu mẫu:
curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
Trong trường hợp trên, tổng kích thước của các tiêu đề
header0
,header1
,header2
vàheader3
lớn hơn 25 KB, tức là tệp này chứa hơn 25 K ký tự ASCII (byte).Nếu bạn đang sử dụng một số ứng dụng khách khác, bạn có thể xem lại nhật ký ứng dụng khách và cố gắng tìm hiểu quy mô của dòng yêu cầu được gửi đến Apigee Edge.
Nhật ký Trình xử lý thư
Để xác thực bằng nhật ký Trình xử lý thư:
Nếu là người dùng Đám mây riêng tư thì bạn có thể sử dụng nhật ký của Trình xử lý thư để xác thực xem kích thước Tiêu đề yêu cầu có vượt quá giới hạn được phép trong Apigee Edge.
Kiểm tra nhật ký Trình xử lý thư:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Tìm kiếm xem có bất kỳ lỗi
431
nào trong một khoảng thời gian cụ thể hay không khoảng thời gian (nếu vấn đề đã xảy ra trong quá khứ) hoặc liệu có bất kỳ yêu cầu nào vẫn không thành công với431
. Bạn có thể sử dụng các chuỗi tìm kiếm sau.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Bạn sẽ thấy các dòng từ
system.log
tương tự như sau:2021-07-27 08:30:28,419 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:GET, uri:/test/, message Id:null, exception:com.apigee.errors.http.user.RequestHeadersTooLarge{ code = protocol.http.TooBigHeaders, message = request headers size exceeding 25,600, associated contexts = []}, context:Context@9c5903 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130 useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms lastIO=0ms isOpen=true)
Văn bản
message = request headers size exceeding 25,600
trong thông báo lỗi ở trên cho biết rằng tổng kích thước của Tiêu đề yêu cầu lớn hơn 25 KB. Do đó, Apigee Edge sẽ gửi trường hợp ngoại lệcom.apigee.errors.http.user.RequestHeadersTooLarge
và trả lại hàng Mã trạng thái431
có mã lỗiprotocol.http.TooBigHeaders
cho ứng dụng khách.
Độ phân giải
Khắc phục kích thước
Lựa chọn 1 [Nên dùng]: Khắc phục vấn đề ứng dụng không gửi tiêu đề yêu cầu bằng tổng kích thước lớn hơn giới hạn cho phép
- Phân tích lý do khiến ứng dụng cụ thể gửi Tiêu đề yêu cầu có kích thước lớn kích thước khiến tổng kích thước tiêu đề lớn hơn giới hạn cho phép như được xác định trong Giới hạn.
Nếu bạn không mong muốn, hãy sửa đổi ứng dụng của bạn để ứng dụng đó gửi Yêu cầu tiêu đề có kích thước nhỏ hơn giới hạn cho phép.
Trong ví dụ được thảo luận ở trên, bạn có thể khắc phục vấn đề này bằng cách chuyển tiêu đề dài các giá trị trong phần nội dung/tải trọng của yêu cầu:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
- Nếu đó là mong muốn và bạn muốn gửi tiêu đề nhiều hơn giới hạn cho phép, hãy chuyển đến tùy chọn tiếp theo.
CwC
Lựa chọn 2 : Sử dụng thuộc tính CwC để tăng giới hạn dòng yêu cầu
Apigee cung cấp CwC, cho phép tăng giới hạn kích thước dòng yêu cầu. Để biết chi tiết, hãy xem Đặt giới hạn dòng yêu cầu trên Trình xử lý thư
Giới hạn
Apigee dự kiến ứng dụng khách và máy chủ phụ trợ sẽ không gửi Tiêu đề yêu cầu/phản hồi có kích thước lớn hơn giới hạn cho phép như được ghi trong tài liệu về Giới hạn kích thước tiêu đề yêu cầu/phản hồi trong Giới hạn Apigee Edge.
- Nếu bạn là người dùng Cloud Public, thì giới hạn tối đa cho Kích thước Tiêu đề yêu cầu và phản hồi như được ghi lại cho kích thước Tiêu đề yêu cầu/phản hồi trong Các giới hạn của Apigee Edge.
- Nếu là người dùng Đám mây riêng tư , thì bạn có thể đã sửa đổi mức tối đa mặc định cho kích thước của Tiêu đề yêu cầu và phản hồi (mặc dù đây không phải là phương pháp nên dùng). Bạn có thể xác định giới hạn kích thước tối đa của tiêu đề yêu cầu bằng cách làm theo hướng dẫn trong Cách kiểm tra hạn mức hiện tại.
Cách kiểm tra hạn mức hiện tại?
Phần này giải thích cách xác minh thuộc tính HTTPRequest.headers.limit
có
đã được cập nhật một giá trị mới trên Trình xử lý thư.
- Trên máy Xử lý thư, hãy tìm kiếm thuộc tính
HTTPRequest.headers.limit
trong Thư mục/opt/apigee/edge-message-processor/conf
và kiểm tra để hãy xem giá trị nào đã được đặt như minh hoạ bên dưới:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- Kết quả mẫu từ lệnh trên như sau:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
Trong kết quả của ví dụ ở trên, hãy lưu ý rằng thuộc tính
HTTPRequest.headers.limit
đã được thiết lập với giá trị25k
tronghttp.properties
.Giá trị này cho biết giới hạn về kích thước tiêu đề của yêu cầu được định cấu hình trong Apigee cho Riêng tư Đám mây là 25 KB.
Thông số kỹ thuật
Apigee Edge muốn ứng dụng khách không gửi các tiêu đề có kích thước lớn như một phần của
của bạn. Trong trường hợp yêu cầu chứa tiêu đề có tổng kích thước lớn hơn giới hạn đã chỉ định,
Apigee gửi 431 Request Header Fields Too Large
theo RFC sau
thông số kỹ thuật:
Thông số kỹ thuật |
---|
RFC 6585, mục 5: 431 Yêu cầu trường tiêu đề quá lớn |
Nếu bạn vẫn cần hỗ trợ từ Nhóm hỗ trợ Apigee, hãy truy cập vào 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 những thông tin chẩn đoán sau đây 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ỗi431
- 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 tổ chức
- Tên môi trường
- Gói Proxy API
- Tệp theo dõi cho các yêu cầu API không thành công
- Hoàn tất lệnh
curl
dùng để tái hiện lỗi431
Nhật ký truy cập NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Vị trí: ORG, ENV và PORT# đượ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