คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 431 Request Header Fields Too
Large
พร้อมรหัสข้อผิดพลาด protocol.http.TooBigHeaders
เป็นการตอบกลับสำหรับการเรียก API
ข้อความแสดงข้อผิดพลาด
แอปพลิเคชันไคลเอ็นต์จะได้รับโค้ดตอบกลับต่อไปนี้
HTTP/1.1 431 Request Header Fields Too Large
นอกจากนี้ คุณอาจพบข้อความแสดงข้อผิดพลาดต่อไปนี้
{ "fault":{ "faultstring":"request headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
สาเหตุที่เป็นไปได้
ข้อผิดพลาดนี้เกิดขึ้นหากขนาดรวมของส่วนหัวของคำขอทั้งหมดที่แอปพลิเคชันไคลเอ็นต์ส่งไปยัง Apigee Edge โดยเป็นส่วนหนึ่งของคำขอ HTTP สูงกว่าขีดจำกัดที่อนุญาตใน Apigee Edge ตาม RFC 6585 ส่วนที่ 5: 431 ช่องส่วนหัวคำขอใหญ่เกินไป
สาเหตุที่เป็นไปได้ของข้อผิดพลาดนี้มีดังนี้
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาที่ใช้กับ |
---|---|---|
ส่วนหัวของคำขอใหญ่เกินขีดจำกัดที่อนุญาต | ส่วนหัวทั้งหมดที่ส่งโดยแอปพลิเคชันไคลเอ็นต์ซึ่งเป็นส่วนหนึ่งของคำขอ HTTP ที่ส่งไปยัง Apigee Edge มากกว่าขีดจำกัดที่อนุญาตใน Apigee Edge | ผู้ใช้ Edge Public และ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคอย่างใดอย่างหนึ่งต่อไปนี้เพื่อวิเคราะห์ข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้ API Monitoring
- ลงชื่อเข้าใช้ UI ของ Apigee Edge ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่คุณต้องการตรวจสอบปัญหา
- ไปที่หน้าวิเคราะห์ > การตรวจสอบ API > ตรวจสอบ
- เลือกกรอบเวลาเฉพาะที่คุณพบข้อผิดพลาด
- พล็อตโค้ดข้อผิดพลาดเทียบกับเวลา
- เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.TooBigHeaders
และรหัสสถานะ431
ดังที่แสดงด้านล่าง คุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.TooBigHeaders
ดังที่แสดงด้านล่างคลิกดูบันทึกแล้วขยายแถวสำหรับคำขอที่ไม่สำเร็จ
ดูรายละเอียดต่อไปนี้จากหน้าต่าง Logs
- รหัสสถานะ:
431
- แหล่งที่มาของข้อผิดพลาด:
apigee
- Fault Code:
protocol.http.TooBigHeaders
- ความยาวคำขอ(ไบต์):
32150 (> 25 KB)
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
apigee
หรือMP
แล้วรหัสข้อผิดพลาดจะมีค่าprotocol.http.TooBigHeaders
และความยาวของคำขอมากกว่า 25 KB ซึ่งหมายความว่าขนาดรวมของส่วนหัวของคำขอทั้งหมดที่ส่งโดยแอปพลิเคชันไคลเอ็นต์ซึ่งเป็นส่วนหนึ่งของคำขอ HTTP ใหญ่กว่า ขีดจำกัดที่อนุญาตใน Apigee
เครื่องมือการติดตาม
NGINX
วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX
- หากเป็นผู้ใช้ Private Cloud คุณจะใช้บันทึกการเข้าถึง NGINX เพื่อระบุข้อมูลสำคัญเกี่ยวกับข้อผิดพลาด HTTP
431
ได้ ตรวจสอบบันทึกการเข้าถึง NGINX ดังนี้
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ที่ไหน จะแทนที่ ORG, ENV และ PORT# ด้วยค่าจริง
- ค้นหาเพื่อดูว่ามีข้อผิดพลาด
431
ในช่วงเวลาที่ระบุหรือไม่ (หากเกิดปัญหาในอดีต) หรือมีคำขอใดที่ยังคงล้มเหลวด้วย431
หากพบข้อผิดพลาด
431
ที่มี X-Apigee-fault-code ตรงกับค่าของ X-Apigee-fault-code ให้ระบุค่าของ X-Apigee-fault-codeตัวอย่างรายการด้านบนจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X-Apigee-fault-code และ X-Apigee-fault-code
ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source MP
โปรดทราบความยาวของคำขอ:
40159
(40 KB ใหญ่กว่า 25 KB ซึ่งเป็นขีดจำกัดที่อนุญาตสำหรับส่วนหัวของคำขอใน Apigee Edge)ในรายการบันทึกตัวอย่างด้านบน X-Apigee-fault-source มีค่าเป็น
apigee
หรือMP
, X-Apigee-fault-code มีค่าprotocol.http.TooBigHeaders
และ Request Length คือ 40 KB ซึ่งมากกว่าขีดจำกัดที่อนุญาตใน Apigee - 25 KB ซึ่งเป็นการระบุอย่างชัดเจนว่าขนาดรวมของส่วนหัวของคำขอทั้งหมดที่ส่งโดยแอปพลิเคชันไคลเอ็นต์ซึ่งเป็นส่วนหนึ่งของคำขอ HTTP เกินขีดจำกัด 25 KB ใน Apigee Edge ที่อนุญาตให้ใช้ได้
สาเหตุ: ส่วนหัวของคำขอใหญ่เกินขีดจำกัดที่อนุญาต
การวินิจฉัย
- กำหนดFault Code, Fault Source และขนาดคำขอความยาวสำหรับข้อผิดพลาดที่สังเกตโดยใช้ API Monitoring หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวิเคราะห์ทั่วไป
- หาก Fault Source มีค่า
apigee
หรือMP
แล้ว Fault Code จะมีค่าprotocol.http.TooBigHeaders
และ Request Length มากกว่า 25 KB หมายความว่าขนาดคำขอที่ส่งมาจากแอปพลิเคชันไคลเอ็นต์ไปยัง Apigee นั้นมากกว่าขีดจำกัดที่อนุญาตใน Apigee Edge - คุณตรวจสอบได้ว่าส่วนหัวของคำขอมีขนาดเกินขีดจำกัด 25 KB ที่อนุญาตโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
ข้อความแสดงข้อผิดพลาด
หากต้องการตรวจสอบโดยใช้ข้อความแสดงข้อผิดพลาด ให้ทำดังนี้
หากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge โปรดดู
faultstring
faultstring
บ่งบอกว่าขนาดส่วนหัวของคำขอทั้งหมดเกินขีดจำกัด 25 KB ที่อนุญาตตัวอย่างข้อความแสดงข้อผิดพลาด
"faultstring":"request headers size exceeding 25,600"
คำขอจริง
วิธีตรวจสอบโดยใช้คำขอจริง
หากคุณมีสิทธิ์เข้าถึงคำขอจริงจากแอปพลิเคชันไคลเอ็นต์ ให้ทำตามขั้นตอนต่อไปนี้
- ยืนยันขนาดของส่วนหัวที่ส่งในคำขอ
หากคุณพบว่าขนาดรวมของส่วนหัวเกินขีดจำกัดที่อนุญาตใน Apigee Edge แสดงว่านี่เป็นสาเหตุของปัญหา
ตัวอย่างคำขอ
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>"
ในกรณีข้างต้น ขนาดรวมของส่วนหัว
header0
,header1
,header2
และheader3
ใหญ่กว่า 25 KB ซึ่งหมายความว่ามีอักขระ ASCII เกิน 25 K (ไบต์)หากใช้ไคลเอ็นต์อื่นอยู่ ให้ตรวจสอบบันทึกไคลเอ็นต์และพยายามหาขนาดของบรรทัดคำขอที่ส่งไปยัง Apigee Edge
บันทึกตัวประมวลผลข้อความ
วิธีตรวจสอบโดยใช้บันทึกตัวประมวลผลข้อความ
หากคุณเป็นผู้ใช้ Private Cloud คุณจะใช้บันทึกตัวประมวลผลข้อความเพื่อตรวจสอบว่าขนาดของส่วนหัวของคำขอเกินขีดจำกัดที่อนุญาตใน Apigee Edge หรือไม่
ตรวจสอบบันทึกของตัวประมวลผลข้อความดังนี้
/opt/apigee/var/log/edge-message-processor/logs/system.log
- ค้นหาเพื่อดูว่ามีข้อผิดพลาด
431
ใดๆ ในช่วงเวลาที่ระบุหรือไม่ (หากเกิดปัญหาในอดีต) หรือมีคำขอใดที่ยังคงดำเนินการไม่สำเร็จเมื่อใช้431
คุณอาจใช้สตริงการค้นหาต่อไปนี้grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- คุณจะเห็นบรรทัดจาก
system.log
ที่คล้ายกับข้อความต่อไปนี้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)
ข้อความ
message = request headers size exceeding 25,600
ในข้อความแสดงข้อผิดพลาดข้างต้นระบุว่าส่วนหัวของคำขอทั้งหมดมีขนาดเกิน 25 KB ดังนั้น Apigee Edge จึงจะส่งข้อยกเว้นcom.apigee.errors.http.user.RequestHeadersTooLarge
และส่งรหัสสถานะ431
ที่มีรหัสข้อผิดพลาดprotocol.http.TooBigHeaders
ไปยังแอปพลิเคชันไคลเอ็นต์
ความละเอียด
ขนาดคงที่
ตัวเลือกที่ 1 [แนะนำ]: แก้ไขแอปพลิเคชันไคลเอ็นต์ไม่ให้ส่งส่วนหัวของคำขอที่มีขนาดโดยรวมใหญ่กว่าขีดจำกัดที่อนุญาต
- วิเคราะห์สาเหตุที่ไคลเอ็นต์เฉพาะส่งส่วนหัวของคำขอที่มีขนาดใหญ่ ซึ่งทำให้ขนาดส่วนหัวทั้งหมดเกินขีดจำกัดที่อนุญาตตามที่กำหนดไว้ในขีดจำกัด
หากไม่เป็นที่ต้องการ ให้แก้ไขแอปพลิเคชันไคลเอ็นต์ให้ส่งส่วนหัวของคำขอที่มีขนาดต่ำกว่าขีดจำกัดที่อนุญาต
ในตัวอย่างที่กล่าวถึงข้างต้น คุณแก้ไขปัญหาได้ด้วยการส่งผ่านพารามิเตอร์ค่าส่วนหัวแบบยาวเป็นส่วนหนึ่งของเนื้อหา/เพย์โหลดคำขอ ดังนี้
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
- หากคุณต้องการส่งส่วนหัวเกินขีดจำกัดที่อนุญาต ให้ไปที่ตัวเลือกถัดไป
CwC
ตัวเลือกที่ 2 : ใช้พร็อพเพอร์ตี้ CwC เพื่อเพิ่มขีดจํากัดบรรทัดคําขอ
Apigee มีพร็อพเพอร์ตี้ CwC ที่ช่วยให้เพิ่มขีดจำกัดขนาดบรรทัดคำขอได้ โปรดดูรายละเอียดที่ กำหนดขีดจำกัดบรรทัดคำขอในเครื่องมือประมวลผลข้อความ
ข้อจำกัด
Apigee คาดหวังให้แอปพลิเคชันไคลเอ็นต์และเซิร์ฟเวอร์แบ็กเอนด์ไม่ส่งส่วนหัวคำขอ/การตอบกลับที่มีขนาดมากกว่าขีดจำกัดที่อนุญาตตามที่ระบุไว้สำหรับขีดจำกัดของขนาดส่วนหัวของคำขอ/การตอบกลับในขีดจำกัด Apigee Edge
- หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ขนาดส่วนหัวคำขอและการตอบกลับสูงสุดจะบันทึกไว้สำหรับขนาดของส่วนหัวของคำขอ/การตอบกลับในขีดจำกัดของ Apigee Edge
- หากคุณเป็นผู้ใช้ Private Cloud ก็อาจแก้ไขขีดจำกัดสูงสุดเริ่มต้นสำหรับขนาดของส่วนหัวคำขอและการตอบกลับ (แม้ว่าจะไม่ใช่แนวทางปฏิบัติที่แนะนำก็ตาม) คุณระบุขนาดสูงสุดของส่วนหัวของคำขอได้โดยทำตามวิธีการในวิธีตรวจสอบขีดจำกัดปัจจุบัน
วิธีตรวจสอบขีดจำกัดปัจจุบัน
ส่วนนี้จะอธิบายวิธียืนยันว่าพร็อพเพอร์ตี้ HTTPRequest.headers.limit
ได้รับการอัปเดตด้วยค่าใหม่ในตัวประมวลผลข้อความแล้ว
- ในเครื่องเครื่องมือประมวลผลข้อความ ให้ค้นหาพร็อพเพอร์ตี้
HTTPRequest.headers.limit
ในไดเรกทอรี/opt/apigee/edge-message-processor/conf
และตรวจสอบดูว่าได้กำหนดค่าไว้เท่าใดดังที่แสดงด้านล่างgrep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- ผลลัพธ์ตัวอย่างจากคำสั่งด้านบนมีดังนี้
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
ในเอาต์พุตตัวอย่างข้างต้น โปรดทราบว่ามีการตั้งค่าพร็อพเพอร์ตี้
HTTPRequest.headers.limit
ด้วยค่า25k
ในhttp.properties
ซึ่งระบุว่าขีดจำกัดขนาดของส่วนหัวของคำขอที่กำหนดค่าใน Apigee สำหรับ Private Cloud คือ 25 KB
ข้อมูลจำเพาะ
Apigee Edge คาดหวังให้แอปพลิเคชันไคลเอ็นต์ไม่ส่งส่วนหัวขนาดใหญ่เป็นส่วนหนึ่งของคำขอ ในกรณีที่คำขอมีส่วนหัวที่มีขนาดรวมเกินขีดจำกัดที่ระบุไว้ Apigee จะส่ง 431 Request Header Fields Too Large
ตามข้อกำหนดของ RFC ต่อไปนี้
ข้อมูลจำเพาะ |
---|
RFC 6585 ส่วนที่ 5: 431 ช่องส่วนหัวของคำขอใหญ่เกินไป |
หากยังต้องการความช่วยเหลือจากทีมสนับสนุนของ Apigee ให้ไปที่หัวข้อต้องรวบรวมข้อมูลการวินิจฉัย
ต้องรวบรวมข้อมูลการวินิจฉัย
รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ จากนั้นติดต่อฝ่ายสนับสนุนของ Apigee Edge
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- ใช้คำสั่ง
curl
เพื่อทำให้เกิดข้อผิดพลาด431
ซ้ำ - ไฟล์การติดตามสำหรับคำขอ API
หากคุณเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้
- สังเกตข้อความแสดงข้อผิดพลาดสำหรับคำขอที่ไม่สำเร็จ
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- กลุ่มพร็อกซี API
- ไฟล์การติดตามสำหรับคำขอ API ที่ล้มเหลว
- ใช้คำสั่ง
curl
เพื่อทำให้เกิดข้อผิดพลาด431
ซ้ำ บันทึกการเข้าถึง NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ที่ไหน จะแทนที่ ORG, ENV และ PORT# ด้วยค่าจริง
- บันทึกระบบของผู้ประมวลผลข้อความ
/opt/apigee/var/log/edge-message-processor/logs/system.log