คุณกำลังดูเอกสารประกอบ 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 สาธารณะและ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- ลงชื่อเข้าใช้ Apigee Edge UI ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่ต้องการตรวจสอบปัญหา
- ไปที่ วิเคราะห์ > การตรวจสอบ API > หน้าตรวจสอบ
- เลือกกรอบเวลาที่คุณพบข้อผิดพลาด
- พล็อตรหัสข้อผิดพลาดเทียบกับเวลา
- เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.TooBigHeaders
และ รหัสสถานะ431
ดังที่แสดงด้านล่าง คุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.TooBigHeaders
ดังที่แสดงด้านล่างคลิกดูบันทึกและขยายแถวสำหรับคำขอที่ล้มเหลว
จากหน้าต่าง Logs ให้จดรายละเอียดต่อไปนี้
- รหัสสถานะ:
431
- แหล่งที่มาของข้อผิดพลาด:
apigee
- รหัสข้อผิดพลาด:
protocol.http.TooBigHeaders
- ความยาวคำขอ(ไบต์):
32150 (> 25 KB)
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
apigee
หรือMP
ค่า Fault Code มีค่า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 จับคู่ค่าของprotocol.http.TooBigHeaders
แล้วหา ค่าของ X-Apigee-fault-source.ตัวอย่างรายการข้างต้นจากบันทึกการเข้าถึง 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
และความยาวของคำขอคือ 40 KB เกินขีดจำกัดที่อนุญาตใน Apigee คือ 25 KB สิ่งนี้ชี้ให้เห็นอย่างชัดเจนว่า ขนาดรวมของส่วนหัวของคำขอทั้งหมดที่ส่งโดยแอปพลิเคชันไคลเอ็นต์โดยเป็นส่วนหนึ่งของ HTTP คำขอมีขนาดเกินขีดจำกัด 25 KB ใน Apigee Edge
สาเหตุ: ส่วนหัวของคำขอเกินขีดจำกัดที่อนุญาต
การวินิจฉัย
- กำหนดรหัสข้อผิดพลาด แหล่งที่มาของข้อผิดพลาด และขนาดคำขอสำหรับค่า ข้อผิดพลาดที่พบโดยใช้การตรวจสอบ API หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
apigee
หรือMP
Fault Code มีค่าprotocol.http.TooBigHeaders
และความยาวของคำขอต้องมากกว่า 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 กล่าวคือมี มากกว่า 25 K ASCII (ไบต์)ถ้าคุณใช้ไคลเอ็นต์อื่น คุณสามารถตรวจสอบบันทึกของไคลเอ็นต์ ให้ลองหาขนาดของบรรทัดคำขอที่ส่งไปยัง 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 ระบบคลาวด์มีขนาด 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