คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ 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, section 5: 431 Request Header Fields Too Large
สาเหตุที่เป็นไปได้ของข้อผิดพลาดนี้มีดังนี้
| สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาที่ใช้ได้กับ |
|---|---|---|
| ขนาดส่วนหัวของคำขอใหญ่กว่าขีดจำกัดที่อนุญาต | ขนาดรวมของส่วนหัวทั้งหมดที่แอปพลิเคชันไคลเอ็นต์ส่งเป็นส่วนหนึ่งของคำขอ HTTP ไปยัง Apigee Edge มีขนาดใหญ่กว่า ขีดจำกัดที่อนุญาตใน Apigee Edge | ผู้ใช้ Edge Public และ Private Cloud |
ขั้นตอนการวินิจฉัยที่พบบ่อย
ใช้เครื่องมือ/เทคนิคใดเทคนิคหนึ่งต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
API Monitoring
วิธีวินิจฉัยข้อผิดพลาดโดยใช้ API Monitoring
- ลงชื่อเข้าใช้ UI ของ Apigee Edge ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนไปใช้องค์กรที่คุณต้องการตรวจสอบปัญหา
- ไปที่หน้า Analyze > API Monitoring > Investigate
- เลือกกรอบเวลาที่เฉพาะเจาะจงที่คุณพบข้อผิดพลาด
- พล็อต Fault Code เทียบกับ Time
- เลือกเซลล์ที่มี Fault Code เป็น
protocol.http.TooBigHeadersและ รหัสสถานะเป็น431ดังที่แสดงด้านล่าง
คุณจะเห็นข้อมูลเกี่ยวกับ Fault Code
protocol.http.TooBigHeadersดังที่แสดงด้านล่าง
คลิกดูบันทึก แล้วขยายแถวสำหรับคำขอที่ล้มเหลว
จากหน้าต่างบันทึก ให้จดรายละเอียดต่อไปนี้
- รหัสสถานะ:
431 - แหล่งที่มาของข้อผิดพลาด:
apigee - Fault Code:
protocol.http.TooBigHeaders - ความยาวของคำขอ(ไบต์):
32150 (> 25 KB)
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาด มีค่าเป็น
apigeeหรือMPFault Code มีค่าเป็นprotocol.http.TooBigHeadersและความยาวของคำขอ มากกว่า 25 KB แสดงว่าขนาดรวมของส่วนหัวของคำขอทั้งหมดที่แอปพลิเคชันไคลเอ็นต์ส่งเป็นส่วนหนึ่งของคำขอ HTTP มีขนาดใหญ่กว่า ขีดจำกัดที่อนุญาตใน Apigee
เครื่องมือ Trace
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-source:
ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source MPโปรดทราบความยาวของคำขอ:
40159(40 KB มากกว่า 25 KB, ขีดจำกัดที่อนุญาตสำหรับส่วนหัวของคำขอใน Apigee Edge)ในรายการบันทึกตัวอย่างข้างต้น X-Apigee-fault-source มีค่าเป็น
apigeeหรือMPX-Apigee-fault-code มีค่าเป็นprotocol.http.TooBigHeadersและ ความยาวของคำขอ คือ 40 KB ซึ่ง มากกว่าขีดจำกัดที่อนุญาตใน Apigee ซึ่งคือ 25 KB ซึ่งแสดงให้เห็นอย่างชัดเจนว่าขนาดรวมของส่วนหัวของคำขอทั้งหมดที่แอปพลิเคชันไคลเอ็นต์ส่งเป็นส่วนหนึ่งของคำขอ HTTP มีขนาดเกินขีดจำกัดที่อนุญาต 25 KB ใน Apigee Edge
สาเหตุ: ขนาดส่วนหัวของคำขอใหญ่กว่าขีดจำกัดที่อนุญาต
การวินิจฉัย
- กำหนด Fault Code แหล่งที่มาของข้อผิดพลาด และขนาดความยาวของคำขอ สำหรับ ข้อผิดพลาดที่พบโดยใช้ API Monitoring หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยที่พบบ่อย
- หากแหล่งที่มาของข้อผิดพลาด มีค่าเป็น
apigeeหรือMP, Fault Code มีค่าเป็นprotocol.http.TooBigHeaders, และความยาวของคำขอ มากกว่า 25 KB แสดงว่า ขนาดคำขอที่แอปพลิเคชันไคลเอ็นต์ส่งไปยัง Apigee มีขนาดใหญ่กว่า ขีดจำกัดที่อนุญาตใน Apigee Edge - คุณสามารถตรวจสอบว่าขนาดส่วนหัวของคำขอเกินขีดจำกัดที่อนุญาต 25 KB โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
ข้อความแสดงข้อผิดพลาด
วิธีตรวจสอบความถูกต้องโดยใช้ข้อความแสดงข้อผิดพลาด
หากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge ให้ ดู
faultstringfaultstringจะระบุว่าขนาดรวมของส่วนหัวของคำขอเกินขีดจำกัดที่อนุญาต 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,000 ตัวหากคุณใช้ไคลเอ็นต์อื่น ให้ตรวจสอบบันทึกของไคลเอ็นต์และ ลองดูขนาดของบรรทัดคำขอที่ส่งไปยัง Apigee Edge
บันทึกของ Message Processor
วิธีตรวจสอบความถูกต้องโดยใช้บันทึกของ Message Processor
หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกของ Message Processor เพื่อ ตรวจสอบว่าขนาดส่วนหัวของคำขอเกิน ขีดจำกัดที่อนุญาตใน Apigee Edge หรือไม่
ตรวจสอบบันทึกของ Message Processor
/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พร้อม Fault Codeprotocol.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 ซึ่งช่วยให้เพิ่มขีดจำกัดขนาดบรรทัดคำขอได้ ดูรายละเอียดได้ที่หัวข้อ ตั้งค่าขีดจำกัดบรรทัดคำขอใน Message Processor
จำกัดสูงสุด
Apigee คาดหวังว่าแอปพลิเคชันไคลเอ็นต์และเซิร์ฟเวอร์แบ็กเอนด์จะไม่ส่ง ส่วนหัวของคำขอ/การตอบกลับที่มีขนาดใหญ่กว่าขีดจำกัดที่อนุญาตตามที่ระบุไว้ในเอกสารประกอบ สำหรับขีดจำกัดขนาดส่วนหัวของคำขอ/การตอบกลับใน ขีดจำกัดของ Apigee Edge
- หากคุณเป็นผู้ใช้ Public Cloud ขีดจำกัดสูงสุดสำหรับ ขนาดส่วนหัวของคำขอและการตอบกลับจะเป็นไปตามที่ระบุไว้ในเอกสารประกอบสำหรับขนาดส่วนหัวของคำขอ/การตอบกลับ ใน ขีดจำกัดของ Apigee Edge
- หากคุณเป็นผู้ใช้ Private Cloud คุณอาจแก้ไขขีดจำกัดสูงสุดเริ่มต้นสำหรับขนาดส่วนหัวของคำขอและการตอบกลับ (แม้ว่าจะไม่ใช่วิธีที่แนะนำ) คุณสามารถกำหนดขีดจำกัดสูงสุดของขนาดส่วนหัวของคำขอได้โดยทำตามวิธีการใน หัวข้อวิธีตรวจสอบขีดจำกัดปัจจุบัน.
วิธีตรวจสอบขีดจำกัดปัจจุบัน
ส่วนนี้อธิบายวิธีตรวจสอบว่าพร็อพเพอร์ตี้ HTTPRequest.headers.limit ได้รับการอัปเดตด้วยค่าใหม่ใน Message Processor แล้ว
- ในเครื่อง Message Processor ให้ค้นหาพร็อพเพอร์ตี้
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, section 5: 431 Request Header Fields Too Large |
หากยังต้องการความช่วยเหลือจากทีมสนับสนุนของ Apigee ให้ไปที่ ข้อมูลการวินิจฉัยที่ต้องรวบรวม
ข้อมูลการวินิจฉัยที่ต้องรวบรวม
รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ แล้วติดต่อ ทีมสนับสนุนของ Apigee Edge
หากคุณเป็นผู้ใช้ Public Cloud โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- คำสั่ง
curlที่สมบูรณ์ซึ่งใช้ในการจำลองข้อผิดพลาด431 - ไฟล์ Trace สำหรับคำขอ API
หากคุณเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้
- ข้อความแสดงข้อผิดพลาดทั้งหมดที่พบสำหรับคำขอที่ล้มเหลว
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- App Bundle ของพร็อกซี API
- ไฟล์ Trace สำหรับคำขอ API ที่ล้มเหลว
- คำสั่ง
curlที่สมบูรณ์ซึ่งใช้ในการจำลองข้อผิดพลาด431 บันทึกการเข้าถึง NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logโดยที่: ORG, ENV และ PORT# จะถูกแทนที่ด้วย ค่าจริง
- บันทึกของระบบ Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log