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 400 Bad Request với mã lỗi protocol.http.DuplicateHeader 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 400 Bad Request
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":"Duplicate Header \"Expires\"",
"detail":{
"errorcode":"protocol.http.DuplicateHeader"
}
}
}Các nguyên nhân có thể
Lỗi này xảy ra nếu một tiêu đề HTTP cụ thể không được phép có bản sao trong Apigee Edge, xuất hiện nhiều lần với cùng một giá trị hoặc các giá trị khác nhau trong yêu cầu HTTP do máy khách gửi đến Apigee Edge.
Theo
RFC 7230, mục 3.2.2: Field Order, người gửi KHÔNG ĐƯỢC tạo nhiều trường tiêu đề có cùng tên trường trong một thư, trừ phi toàn bộ giá trị trường cho trường tiêu đề đó được xác định là một danh sách được phân tách bằng dấu phẩy, [tức là #(values)] hoặc trường tiêu đề là một ngoại lệ nổi tiếng. Nếu Apigee Edge tìm thấy một tiêu đề cụ thể (không được phép có bản sao) nhiều lần trong yêu cầu HTTP do máy khách gửi, thì tiêu đề đó sẽ phản hồi bằng 400 Bad Request và mã lỗi protocol.http.DuplicateHeader.
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 |
|---|---|---|
| Tiêu đề trùng lặp trong yêu cầu | Yêu cầu HTTP từ ứng dụng khách đến Apigee chứa các tiêu đề trùng lặp. | 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.
- Đảm bảo rằng Bộ lọc proxy được đặt thành Tất cả.
- Vẽ Mã lỗi theo Thời gian.
Chọn một ô có mã lỗi
protocol.http.DuplicateHeadernhư minh hoạ bên dưới:
Thông tin về mã lỗi
protocol.http.DuplicateHeadersẽ xuất hiện như hình 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:
400 - Nguồn lỗi:
apigee - Mã lỗi:
protocol.http.DuplicateHeader.
- Mã trạng thái:
- Nếu Nguồn lỗi có giá trị
apigeehoặcMPvà Mã lỗi có giá trịprotocol.http.DuplicateHeader, thì điều đó có nghĩa là yêu cầu HTTP từ máy khách chứa các tiêu đề trùng lặp.
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, thì 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
400. Kiểm tra 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 bằng các giá trị thực tế.
- Tìm kiếm để xem có lỗi
400nà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ới400hay không. Nếu bạn tìm thấy bất kỳ lỗi
400nào có X-Apigee-fault-code khớp với giá trị củaprotocol.http.DuplicateHeader, thì hãy xác định giá trị của X-Apigee-fault-source.Ví dụ về lỗi 400 trong nhật ký truy cập NGINX:
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.DuplicateHeaderX-Apigee-fault-source MP
Nguyên nhân: Tiêu đề trùng lặp 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 cách sử dụng tính năng Giám sát API hoặc nhật ký truy cập NGINX như được 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, thì điều này có nghĩa là yêu cầu do ứng dụng khách gửi đến Apigee có chứa các tiêu đề trùng lặp. Bạn có thể xác định tiêu đề thực tế được gửi nhiều lần trong yêu cầu 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 hoàn chỉnh nhận được từ Apigee Edge, hãy tham khảo
faultstring.faultstringchứa tên tiêu đề đã được gửi nhiều lần.Thông báo lỗi mẫu:
"faultstring":"Duplicate Header \"Expires\""
- Trong thông báo lỗi ở trên, bạn có thể thấy tiêu đề
Expiresđược gửi nhiều lần như trongfaultstring.
Yêu cầu thực tế
Sử dụ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 danh sách tiêu đề được truyền trong yêu cầu.
- Nếu bạn thấy một tiêu đề cụ thể xuất hiện nhiều lần trong yêu cầu với cùng một giá trị hoặc các giá trị khác nhau , thì đó là nguyên nhân gây ra lỗi này.
Yêu cầu mẫu:
curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
Trong yêu cầu ví dụ ở trên, tiêu đề
Expiresđược gửi nhiều lần. Do đó, yêu cầu này không thành công với lỗi400 Bad Requestvà mã lỗi:protocol.http.DuplicateHeader.- Ngoài ra, nếu có quyền truy cập vào nhật ký máy khách, bạn có thể xem liệu mình có thông tin về yêu cầu thực tế được gửi đến Apigee Edge hay không và xác định tiêu đề được gửi nhiều lần.
Độ phân giải
Khắc phục tình trạng trùng lặp
Lựa chọn 1 [Lựa chọn được đề xuất] Sửa ứng dụng khách để không bao gồm các tiêu đề trùng lặp
- Phân tích lý do khiến ứng dụng cụ thể gửi tiêu đề trùng lặp. Ví dụ:
Expirestrong trường hợp trên. Xác minh rằng các proxy API có thể chấp nhận tiêu đề trùng lặp. Thông thường, điều này không mong muốn theo quy cách HTTP RFC7230. - Nếu không mong muốn điều này, hãy sửa đổi ứng dụng khách của bạn để không gửi tiêu đề trùng lặp.
Trong ví dụ được thảo luận ở trên, bạn nhận thấy tiêu đề
Expiresđược gửi hai lần với cùng một giá trị, điều này là không nên. Bạn có thể khắc phục vấn đề này bằng cách chỉ truyền tiêu đềExpiresmột lần như minh hoạ bên dưới:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- Nếu bạn muốn cho phép các tiêu đề trùng lặp, hãy chuyển đến Lựa chọn 2: Sử dụng thuộc tính CwC.
CwC
Lựa chọn 2: Sử dụng tài sản CwC
Apigee cung cấp một thuộc tính
CwC HTTPHeader.<HeaderName> ,cho phép các ứng dụng và máy chủ đích gửi tiêu đề trùng lặp đến các proxy API trong Apigee Edge.
| Tài sản CwC | Giá trị |
|---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Ví dụ: bạn có thể đặt thuộc tính sau trên Trình xử lý thông báo để cho phép các giá trị trùng lặp và nhiều giá trị cho tiêu đề Expires.
HTTPHeader.Expires=allowDuplicates, multiValued
- Nếu là người dùng Đám mây riêng, bạn có thể định cấu hình thuộc tính để ngăn Apigee Edge phát sinh lỗi
400 Bad Request, ngay cả khi yêu cầu chứa các tiêu đề trùng lặp bằng cách sử dụng hướng dẫn cách thực hiện Định cấu hình Bộ xử lý thông báo để sử dụng các tiêu đề trùng lặp. - Nếu bạn là người dùng Đám mây công khai, hãy liên hệ với Nhóm hỗ trợ Apigee Edge để định cấu hình thuộc tính này cho tổ chức của bạn.
Thông số kỹ thuật
Apigee yêu cầu ứng dụng không gửi các tiêu đề trùng lặp trong yêu cầu theo các quy cách RFC sau:
| Thông số kỹ thuật |
|---|
| RFC 7230, phần 3.2.2: Thứ tự trường |
| RFC 7230, phần 3.2 Trường tiêu đề |
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ỗi400 - 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 môi trường
- Gói proxy API
- Hoàn tất lệnh
curlmà bạn đã dùng để tái hiện lỗi400 - 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_logTrong đó: ORG, ENV và PORT# được thay bằng các giá trị thực tế.
- Nhật ký hệ thống của Trình xử lý thông báo
/opt/apigee/var/log/edge-message-processor/logs/system.log