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 431 Request Header Fields Too
Large
với mã lỗi protocol.http.TooBigHeaders
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 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ả tiêu đề yêu cầu mà ứ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 cho phép trong Apigee Edge theo RFC 6585, mục 5: 431 Trường tiêu đề yêu cầu quá lớn.
Dưới đây là một số nguyên nhân có thể gây ra lỗi này:
Nguyên nhân | Nội dung mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
---|---|---|
Kích thước của 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 khách gửi trong yêu cầu HTTP tới Apigee Edge lớn hơn giới hạn được cho phép trong Apigee Edge. | 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.
- Vẽ Mã lỗi dựa trên Thời gian.
- Chọn một ô có mã lỗi
protocol.http.TooBigHeaders
và mã trạng thái431
như minh hoạ bên dưới: Bạn sẽ thấy thông tin về mã lỗi
protocol.http.TooBigHeaders
như dưới đây:Nhấp vào Xem nhật ký rồi mở rộng hàng cho yêu cầu không thành công:
Trong 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, tức là tổng kích thước của tất cả tiêu đề yêu cầu mà ứng dụng 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 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
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 bằng 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 vấn đề đã xảy ra trong quá khứ) hoặc có yêu cầu nào vẫn không thành công với431
hay không. Nếu bạn tìm thấy bất kỳ lỗi
431
nào trong đó X-Apigee-fault-code khớp với giá trị của X-Apigee-fault-code , thì hãy xác định giá trị của X-Apigee-fault-codeMụ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 protocol.http.TooBigHeaders
X-Apigee-fault-source MP
Lưu ý rằng độ 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 có giá trịprotocol.http.TooBigHeaders
và Request Chiều dài 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ả tiêu đề của yêu cầu mà ứ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 đề 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 chiều dài yêu cầu cho lỗi quan sát được bằng nhật ký 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ị
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ì tức là 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 cho phép trong Apigee Edge. - Bạn có thể xác thực rằng kích thước của tiêu đề của 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 đầy đủ mà Apigee nhận được từ Apigee, hãy tham khảo
faultstring
.faultstring
cho biết tổng kích thước của các Tiêu đề của yêu cầu đã vượt quá giới hạn cho phép là 25 KB.Mẫu thông báo lỗi:
"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, 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 chuyển trong yêu cầu.
Nếu bạn nhận thấy tổng kích thước của tiêu đề lớn hơn giới hạn cho phép trong Apigee Edge, thì đó chính 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à chứa hơn 25 K ký tự ASCII (byte).Nếu đang dùng một ứng dụng khác, bạn có thể kiểm tra 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 đang được gửi đến Apigee Edge.
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ể dùng nhật ký Trình xử lý thư để xác thực xem kích thước của Tiêu đề yêu cầu có vượt quá giới hạn được cho phép trong Apigee Edge hay không.
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ó lỗi
431
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ó yêu cầu nào vẫn không thành công với431
hay 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 trong
system.log
có dạng 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 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.RequestHeadersTooLarge
và trả về mã trạng thái431
có mã lỗiprotocol.http.TooBigHeaders
cho các ứng dụng khách.
Độ phân giải
Cố định kích thước
Lựa chọn 1 [Nên dùng]: Khắc phục lỗi ứng dụng khách không gửi tiêu đề của 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, khiến tổng kích thước tiêu đề vượt quá giới hạn cho phép như xác định trong phần Giới hạn.
Nếu điều này là không mong muốn, hãy sửa đổi ứng dụng khách của bạn để ứng dụng 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 đề này bằng cách truyền tham số giá trị tiêu đề dài như một phần của nội dung/tải trọng 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 điều này 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 tuỳ chọn tiếp theo.
CwC
Lựa chọn 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 bài viết Thiết lập giới hạn dòng yêu cầu trên Bộ xử lý thư
Các giới hạn
Apigee dự kiến rằng ứng dụng khách và máy chủ phụ trợ không gửi các 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 nêu trong tài liệu về Giới hạn kích thước tiêu đề của yêu cầu/phản hồi trong phần Giới hạn của API 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 sẽ được ghi trong tài liệu về Kích thước tiêu đề yêu cầu/phản hồi trong phần Giới hạn API API.
- Nếu là người dùng Đám mây riêng tư , thì có thể bạn đã sửa đổi giới hạn 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ù bạn không nên áp dụng phương pháp này). 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 các hướng dẫn trong bài viết 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 với một giá trị mới trên Bộ xử lý thông báo.
- Trên máy xử lý thư, hãy tìm thuộc tính
HTTPRequest.headers.limit
trong thư mục/opt/apigee/edge-message-processor/conf
rồi kiểm tra xem bạn đã thiết lập giá trị nào như đoạn mã 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ả ví dụ ở trên, hãy lưu ý rằng thuộc tính
HTTPRequest.headers.limit
đã được thiết lập bằng giá trị25k
tronghttp.properties
.Điều này cho biết giới hạn của kích thước Tiêu đề yêu cầu được định cấu hình trong Apigee dành cho đám mây riêng tư là 25 KB.
Thông số kỹ thuật
Apigee Edge dự kiến ứng dụng không gửi các 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, thì Apigee sẽ gửi 431 Request Header Fields Too Large
theo các thông số kỹ thuật 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 Nhóm hỗ trợ Apigee hỗ trợ, hãy truy cập 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ỗ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 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 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 tạo lỗi431
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