Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu Apigee X. thông tin
Dấu hiệu
Ứng dụng khách 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 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:
HTTP/1.1 431 Request Header Fields Too Large
Ngoài ra, bạn có thể 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 đến Apigee Edge trong yêu cầu HTTP lớn hơn giới hạn cho phép trong Apigee Edge theo RFC 6585, phần 5: 431 Request Header Fields Too Large.
Sau đâ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 đề của 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ả các tiêu đề do ứng dụng khách gửi trong yêu cầu HTTP đến Apigee Edge lớn hơn giới hạn cho phép trong Apigee Edge. | Người dùng Edge Public Cloud và Private Cloud |
Các bước chẩn đoán thường gặp
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ò phù 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 nhận thấy lỗi.
- Vẽ Mã lỗi theo Thời gian.
- Chọn một ô có mã lỗi
protocol.http.TooBigHeadersvà mã trạng thái431như minh hoạ bên dưới:
Bạn sẽ thấy thông tin về mã lỗi
protocol.http.TooBigHeadersnhư minh hoạ dưới đây:
Nhấp vào Xem nhật ký rồi mở rộng hàng của yêu cầu không thực hiện được:
Trong cửa sổ Nhật ký, hãy lưu ý những thông tin 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ị
apigeehoặcMP, Mã lỗi có giá trịprotocol.http.TooBigHeadersvà Độ dài yêu cầu lớn hơn 25 KB, thì điều đó cho thấy 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 trong yêu cầu HTTP lớn hơn giới hạn cho 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, 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_logVị trí: ORG, ENV và PORT# được thay thế bằng các giá trị thực tế.
- Tìm kiếm để xem có lỗi
431nào xảy ra 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 xem có yêu cầu nào vẫn không thành công với431hay không. Nếu bạn thấy bất kỳ lỗi
431nào có X-Apigee-fault-code khớp với giá trị củaprotocol.http.TooBigHeaders, hãy xác định giá trị của X-Apigee-fault-source.
Mục nhập mẫu ở trên trong nhật ký truy cập NGINX có các giá trị sau cho X-Apigee-fault-code và X-Apigee-fault-source:
Tiêu đề phản hồi Giá trị X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source MPLưu ý về Độ 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 đề 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ị
apigeehoặcMP, X-Apigee-fault-code có giá trịprotocol.http.TooBigHeadersvà Request Length là 40 KB, lớn hơn giới hạn cho phép trong Apigee – 25 KB. Điều này cho thấy rõ rằng 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 trong yêu cầu HTTP đã vượt quá giới hạn cho phép là 25 KB trong Apigee Edge.
Nguyên nhân: Kích thước Tiêu đề 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 lỗi quan sát được bằng cách sử dụ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 Nguồn lỗi có giá trị là
apigeehoặcMP, Mã lỗi có giá trị làprotocol.http.TooBigHeadersvà Độ dài yêu cầu lớn hơn 25 KB, thì điều này cho biết kích thước yêu cầu do ứng dụng khách gửi đến Apigee lớn hơn giới hạn cho 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 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 hoàn chỉnh nhận được từ Apigee Edge, hãy tham khảo
faultstring.faultstringcho biết 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 khách đưa ra, 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 tổng kích thước của các tiêu đề lớn hơn giới hạn cho phép trong Apigee Edge, thì đó là nguyên nhân gây ra 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,header2vàheader3lớn hơn 25 KB, tức là chứa hơn 25 K ký tự ASCII (byte).Nếu đang sử dụng một ứng dụng khác, bạn có thể xem xét nhật ký ứng dụng và cố gắng tìm ra kích thước của dòng yêu cầu được gửi đến Apigee Edge.
Nhật ký Trình xử lý tin nhắn
Cách xác thực bằng nhật ký Message Processor:
Nếu là người dùng Đám mây riêng, bạn có thể sử dụng nhật ký Message Processor để xác thực xem kích thước Tiêu đề yêu cầu có vượt quá giới hạn cho phép trong Apigee Edge hay không.
Kiểm tra nhật ký của Trình xử lý thư:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Tìm kiếm để xem có lỗi
431nào xảy ra 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 xem có yêu cầu nào vẫn không thành công với431hay không. 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.logtươ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,600trong thông báo lỗi ở trên cho biết 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 ngoại lệcom.apigee.errors.http.user.RequestHeadersTooLargevà trả về mã trạng thái431với mã lỗiprotocol.http.TooBigHeaderscho các ứng dụng khách.
Độ phân giải
Kích thước cố định
Lựa chọn 1 [Đề xuất]: Sửa ứng dụng khách để không gửi tiêu đề yêu cầu có 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, làm cho 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 không mong muốn, hãy sửa đổi ứng dụng khách để ứng dụng này gửi Tiêu đề yêu cầu có kích thước nhỏ hơn giới hạn cho phép.
Trong ví dụ đã thảo luận ở trên, bạn có thể khắc phục vấn đề bằng cách truyền tham số giá trị tiêu đề dài 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 bạn muốn gửi một tiêu đề vượt quá hạn mức cho phép, hãy chuyển sang lựa chọn tiếp theo.
CwC
Cách 2 : Sử dụng thuộc tính CwC để tăng hạn mức dòng yêu cầu
Apigee cung cấp một thuộc tính CwC cho phép tăng giới hạn kích thước dòng yêu cầu. Để biết thông tin chi tiết, hãy xem phần Đặt giới hạn dòng yêu cầu trên Trình xử lý thông báo
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 lại cho 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 Đám mây công cộng, thì giới hạn tối đa cho kích thước Tiêu đề yêu cầu và phản hồi là theo tài liệu về Kích thước tiêu đề yêu cầu/phản hồi trong 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 giới hạn tối đa mặc định cho kích thước Tiêu đề yêu cầu và phản hồi (mặc dù đây không phải là cách nên làm). 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 phần Cách kiểm tra giới hạn 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 rằng thuộc tính HTTPRequest.headers.limit đã được cập nhật bằng một giá trị mới trên Message Processors.
- Trên máy Message Processor, hãy tìm thuộc tính
HTTPRequest.headers.limittrong thư mục/opt/apigee/edge-message-processor/confvà kiểm tra để 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
- Sau đây là kết quả mẫu của lệnh trên:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
Trong ví dụ về đầu ra ở trên, hãy lưu ý rằng thuộc tính
HTTPRequest.headers.limitđã được đặt với giá trị25ktronghttp.properties.Điều này cho biết giới hạn kích thước Tiêu đề yêu cầu được định cấu hình trong Apigee cho Private Cloud là 25 KB.
Thông số kỹ thuật
Apigee Edge yêu cầu ứng dụng khách không gửi tiêu đề có kích thước lớn trong yêu cầu. Trong trường hợp yêu cầu chứa các tiêu đề có tổng kích thước lớn hơn giới hạn đã chỉ định, Apigee sẽ gửi 431 Request Header Fields Too Large theo các quy cách RFC sau:
| Thông số kỹ thuật |
|---|
| RFC 6585, mục 5: 431 Trường tiêu đề của yêu cầu quá lớn |
Nếu bạn vẫn cần được Nhóm hỗ trợ Apigee trợ giúp, hãy truy cập vào phần Thông tin chẩn đoán bắt buộc phải thu thập.
Phải thu thập thông tin chẩn đoán
Thu thập thông tin chẩn đoán sau đây, rồi liên hệ với Nhóm hỗ trợ Apigee Edge:
Nếu bạn là người dùng Đám mây công cộng, hãy cung cấp những thông tin sau:
- Tên tổ chức
- Tên môi trường
- Tên API Proxy
- Lệnh
curlhoàn tất được dùng để tái tạo 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, hãy cung cấp những thông tin sau:
- Thông báo lỗi hoàn chỉnh được ghi nhận cho các yêu cầu không thành công
- Tên tổ chức
- Tên môi trường
- Gói API Proxy
- Tệp theo dõi cho các yêu cầu API không thành công
- Lệnh
curlhoàn tất được dùng để tái tạo lỗi431 Nhật ký truy cập NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logTrong đó: ORG, ENV và PORT# được thay thế bằng các giá trị thực tế.
- Nhật ký hệ thống của Trình xử lý tin nhắn
/opt/apigee/var/log/edge-message-processor/logs/system.log