คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 414 Request-URI Too Long
ด้วย
protocol.http.TooBigLine
เป็นการตอบสนองสำหรับการเรียก API
ข้อความแสดงข้อผิดพลาด
แอปพลิเคชันไคลเอ็นต์ได้รับโค้ดตอบกลับต่อไปนี้
HTTP/1.1 414 Request-URI Too Long
นอกจากนี้ คุณอาจสังเกตเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้
{ "fault":{ "faultstring":"request line size exceeding 7,168", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
โปรดทราบว่า faultstring
ในข้อความแสดงข้อผิดพลาดข้างต้นมีขีดจำกัดที่อนุญาต
สำหรับบรรทัดคำขอใน Apigee Edge ซึ่งก็คือ 7168 bytes
(7 KB)
สาเหตุที่เป็นไปได้
ข้อผิดพลาดนี้เกิดขึ้นหากขนาดของบรรทัดคำขอที่แอปพลิเคชันไคลเอ็นต์ส่งไปยัง Apigee Edge เนื่องจากส่วนหนึ่งของคำขอ HTTP มากกว่าขีดจำกัดที่อนุญาตใน Apigee Edge
ก่อนที่เราจะดูสาเหตุที่เป็นไปได้ของข้อผิดพลาดนี้ มาดูกันว่าบรรทัดคำขอ และวิธีตรวจสอบขนาด
ทำความเข้าใจบรรทัดคำขอ
คำขอ HTTP โดยทั่วไปประกอบด้วย 3 ส่วน ดังนี้
- บรรทัดคําขอ
- ( ชุดส่วนหัว HTTP )
- [ เนื้อความ ]
บรรทัดคําขอประกอบด้วย 3 ส่วนดังที่แสดงด้านล่าง
Request-Line = <Method> <Request-URI> <HTTP-Version>
เมื่อแอปพลิเคชันไคลเอ็นต์ส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์ บรรทัดแรกที่ไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์มี Request-Line ตามที่อธิบายข้างต้น ตามด้วย ส่วนหัวและเนื้อหาคำขอ/เพย์โหลด
ภาพหน้าจอตัวอย่างต่อไปนี้แสดงคำขอ curl
ทั่วไป ซึ่งก็คือ คำขอ
(พร้อมด้วย Request-Line) และส่วน Response
ทำความเข้าใจเกี่ยวกับขนาดบรรทัดของคำขอ
- ในตัวอย่างที่พูดถึงข้างต้น บรรทัด start (บรรทัดแรก) ในคำขอยัง
ซึ่งเรียกว่า Request-Line ดังนี้
GET /test/ HTTP/1.1
ขนาดของบรรทัดคำขอคือ
~19 bytes
เนื่องจากมี19 ASCII characters
เนื่องจากอยู่ในระยะ ขีดจำกัดที่อนุญาตใน Apigee Edge ระบบจะดำเนินการกับคำขอโดยไม่มีข้อผิดพลาด และได้รับคำตอบที่ประสบความสำเร็จ - ในทำนองเดียวกัน หากคุณดูที่
faultstring
ในส่วน ข้อความแสดงข้อผิดพลาดที่แสดงด้านบน มีข้อความแสดงข้อผิดพลาด"request line size exceeding 7,168"
ซึ่งหมายความว่า "บรรทัดคำขอ" ในคำขอ HTTP ที่ไคลเอ็นต์สร้างขึ้นเกิน 7,168 ไบต์
สาเหตุที่เป็นไปได้สำหรับข้อผิดพลาดนี้มีดังนี้
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาสำหรับ |
---|---|---|
ขนาดเพย์โหลดคำขอเกินขีดจำกัดที่อนุญาต | ขนาดของ Request-URI ที่ส่งโดยแอปพลิเคชันไคลเอ็นต์โดยเป็นส่วนหนึ่งของ HTTP คำขอไปยัง Apigee Edge สูงกว่าขีดจำกัดที่อนุญาตใน Apigee Edge | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- ลงชื่อเข้าใช้ Apigee Edge UI ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่ต้องการตรวจสอบปัญหา
- ไปที่ วิเคราะห์ > การตรวจสอบ API > หน้าตรวจสอบ
- เลือกกรอบเวลาที่คุณพบข้อผิดพลาด
- พล็อตรหัสข้อผิดพลาดเทียบกับเวลา
- เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.TooBigLine
และ รหัสสถานะ414
ดังที่แสดงด้านล่าง คุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.TooBigline
ดังที่แสดงด้านล่างคลิกดูบันทึกและขยายแถวสำหรับคำขอที่ล้มเหลว
จากหน้าต่าง Logs ให้จดรายละเอียดต่อไปนี้
- รหัสสถานะ:
414
- แหล่งที่มาของข้อผิดพลาด:
apigee
- รหัสข้อผิดพลาด:
protocol.http.TooBigLine
- ความยาวคำขอ(ไบต์):
7244 (> 7KB)
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
apigee
หรือMP
ค่า Fault Code มีค่าprotocol.http.TooBigLine
และ Request-Length คือมากกว่า 7 KB ซึ่งหมายความว่าคำขอ HTTP จากไคลเอ็นต์มี URI คำขอมากกว่า ขีดจำกัดที่อนุญาตใน Apigee
เครื่องมือการติดตาม
NGINX
วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX
- หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกการเข้าถึง NGINX เพื่อ
ระบุข้อมูลสำคัญเกี่ยวกับข้อผิดพลาด HTTP
414
ตรวจสอบบันทึกการเข้าถึง NGINX ดังต่อไปนี้
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ที่ไหน: ระบบจะแทนที่ ORG, ENV และ PORT# ด้วยค่าจริง
- ค้นหาเพื่อดูว่ามีข้อผิดพลาด
414
รายการเกิดขึ้นในช่วงระยะเวลาหนึ่งๆ หรือไม่ (หากเคยมีปัญหาเกิดขึ้นในอดีต) หรือหากมีคำขอที่ยังคงดำเนินการไม่สำเร็จ414
หากคุณพบข้อผิดพลาด
414
ที่มี X-Apigee-fault-code จับคู่ค่าของprotocol.http.TooBigLine
แล้วหา ค่าของ X-Apigee-fault-source.ตัวอย่างรายการข้างต้นจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X-Apigee-fault-code และ X-Apigee-fault-code
ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source policy
โปรดทราบความยาวของคำขอ:
7244
(7.244 KB > ขีดจำกัดที่อนุญาต)
สาเหตุ: ขนาดเพย์โหลดคำขอเกินขีดจำกัดที่อนุญาต
การวินิจฉัย
- กำหนดรหัสข้อผิดพลาด แหล่งที่มาของข้อผิดพลาด และขนาดคำขอสำหรับค่า ข้อผิดพลาดที่พบโดยใช้การตรวจสอบ API, เครื่องมือการติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
apigee
หรือMP
ระบุว่าขนาดคำขอที่แอปพลิเคชันไคลเอ็นต์ส่งไปยัง Apigee มีขนาดใหญ่กว่า ขีดจำกัดที่อนุญาตใน Apigee Edge - คุณสามารถตรวจสอบได้ว่าบรรทัดคำขอมีขนาดเกินขีดจำกัด 7 KB ที่อนุญาตหรือไม่ โดยใช้
วิธีการต่อไปนี้
ข้อความแสดงข้อผิดพลาด
หากต้องการตรวจสอบโดยใช้ข้อความแสดงข้อผิดพลาด ให้ทำดังนี้
หากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge โปรดดูที่
faultstring
faultstring
ระบุว่า ขนาดบรรทัดคําขอมีขนาดเกินขีดจำกัดที่อนุญาตซึ่งเท่ากับ 7 KBตัวอย่างข้อความแสดงข้อผิดพลาด
"faultstring":"request line size exceeding 7,168"
คำขอจริง
วิธีตรวจสอบโดยใช้คำขอจริงมีดังนี้
หากคุณมีสิทธิ์เข้าถึงคำขอจริงจากแอปพลิเคชันไคลเอ็นต์ จากนั้นให้ทำตามขั้นตอนต่อไปนี้
- ยืนยันขนาดของ URI ที่ส่งผ่านในคำขอ
หากคุณพบว่า URI มีขนาดเกิน ขีดจำกัดที่อนุญาตใน Apigee Edge นั่นคือ สาเหตุของปัญหา
ตัวอย่างคำขอ
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
ในกรณีข้างต้น ค่าของพารามิเตอร์การค้นหา
qparam
มีขนาดใหญ่กว่า 7 KB ซึ่งหมายความว่ามีอักขระ ASCII มากกว่า 7 Kถ้าคุณใช้ไคลเอ็นต์อื่น คุณสามารถตรวจสอบบันทึกของไคลเอ็นต์ ให้ลองหาขนาดของบรรทัดคำขอที่ส่งไปยัง Apigee Edge
บันทึกของผู้ประมวลผลข้อความ
วิธีตรวจสอบโดยใช้บันทึกของโปรแกรมประมวลผลข้อความ
หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกของผู้ประมวลผลข้อมูลข้อความเพื่อ ตรวจสอบว่าขนาดบรรทัดคําขอมีขนาดเกิน ขีดจำกัดที่อนุญาตใน Apigee Edge
ตรวจสอบบันทึกของตัวประมวลผลข้อความดังนี้
/opt/apigee/var/log/edge-message-processor/logs/system.log
- ค้นหาเพื่อดูว่ามีข้อผิดพลาด
414
รายการเกิดขึ้นระหว่าง ระยะเวลา (หากปัญหาเกิดขึ้นในอดีต) หรือมีคำขอ ยังคงล้มเหลวกับ414
คุณสามารถใช้สตริงการค้นหาต่อไปนี้grep -ri "exceeding"
grep -ri "RequestURITooLong"
- คุณจะพบเส้นทางจาก
system.log
ที่คล้ายคลึงกับข้อความต่อไปนี้ วันที่2021-07-12 08:53:31,461 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:null, uri:null, message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{ code = protocol.http.TooBigLine, message = request line size exceeding 7,168, associated contexts = []}, context:Context@366f4217 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443 Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849 age=2254670ms lastIO=0ms isOpen=true)
ข้อความ
message = request line size exceeding 7,168
ใน ข้อความแสดงข้อผิดพลาดข้างต้นระบุว่า URI คำขอมีขนาดมากกว่า 7 KB ดังนั้น Apigee Edge จะส่งข้อยกเว้นcom.apigee.errors.http.user.RequestURITooLong
และการคืนสินค้า รหัสสถานะ414
ที่มีรหัสข้อผิดพลาดprotocol.http.TooBigline
ในแอปพลิเคชันไคลเอ็นต์
ความละเอียด
แก้ไขขนาด
ตัวเลือกที่ 1 [แนะนำ]: แก้ไขแอปพลิเคชันไคลเอ็นต์ไม่ให้ส่ง URI คำขอที่มีขนาดใหญ่กว่าขีดจำกัดที่อนุญาต
- วิเคราะห์สาเหตุที่ไคลเอ็นต์ที่ระบุส่งขนาด URI คำขอมากกว่า ขีดจำกัดที่อนุญาตตามที่ระบุไว้ในขีดจำกัด
หากไม่พึงประสงค์ ให้แก้ไขแอปพลิเคชันไคลเอ็นต์เพื่อให้ส่ง URI คำขอ ขนาดน้อยกว่าขีดจำกัดที่อนุญาต
ในตัวอย่างที่กล่าวถึงข้างต้น คุณสามารถแก้ไขปัญหาได้โดยส่งข้อความค้นหาแบบยาว เป็นส่วนหนึ่งของเนื้อหา/เพย์โหลดคำขอ แทนการส่งเป็นส่วนหนึ่งของ URL คำขอตามที่แสดงด้านล่าง:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
- หากต้องการส่งไฟล์ URI ที่เกินขีดจำกัดที่อนุญาต ให้ไปที่ ตัวเลือกถัดไป
CwC
ตัวเลือกที่ 2 : ใช้พร็อพเพอร์ตี้ CwC เพื่อเพิ่มขีดจำกัดบรรทัดคำขอ
Apigee จะมอบ พร็อพเพอร์ตี้ CwC ที่ช่วยให้เพิ่มขีดจํากัดขนาดบรรทัดคําขอได้ โปรดดูรายละเอียดที่ กำหนดขีดจำกัดบรรทัดคำขอในเครื่องมือประมวลผลข้อความ
จำกัดสูงสุด
Apigee คาดว่าแอปพลิเคชันไคลเอ็นต์และเซิร์ฟเวอร์แบ็กเอนด์จะไม่ส่งคำขอ/บรรทัดการตอบกลับ ซึ่งมีขนาดเกินขีดจำกัดที่อนุญาตตามที่ระบุไว้ในเอกสารขีดจำกัดบรรทัดคำขอ/ตอบกลับ ในขีดจำกัด Apigee Edge
- หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ขีดจำกัดสูงสุดสำหรับคำขอและ ขนาดบรรทัดการตอบกลับได้รับการบันทึกเป็นเอกสารสำหรับขนาดคําขอ/บรรทัดการตอบกลับใน ขีดจำกัด Apigee Edge
- หากคุณเป็นผู้ใช้ Private Cloud คุณอาจได้แก้ไขขีดจำกัดสูงสุดเริ่มต้น ขีดจำกัดสำหรับขนาดคำขอและบรรทัดการตอบกลับ (แม้ว่าจะไม่ใช่แนวทางปฏิบัติที่แนะนำก็ตาม) คุณสามารถกำหนดขนาดสูงสุดของบรรทัดคำขอได้โดยทำตามวิธีการใน วิธีตรวจสอบขีดจำกัดปัจจุบัน
วิธีตรวจสอบขีดจำกัดปัจจุบัน
ส่วนนี้จะอธิบายวิธียืนยันว่าพร็อพเพอร์ตี้ HTTPRequest.line.limit
มี
อัปเดตเป็นค่าใหม่ให้กับตัวประมวลผลข้อความแล้ว
- ค้นหาคุณสมบัติในเครื่องประมวลผลข้อความ
HTTPRequest.line.limit
ในช่วง ไดเรกทอรี/opt/apigee/edge-message-processor/conf
และตรวจสอบเพื่อ ให้ดูค่าที่ตั้งไว้ตามที่แสดงด้านล่างgrep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
- ตัวอย่างผลลัพธ์จากคำสั่งด้านบนมีดังนี้
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
ในตัวอย่างเอาต์พุตด้านบน โปรดทราบว่าพร็อพเพอร์ตี้
HTTPRequest.line.limit
ได้รับการตั้งค่าด้วยค่า7k
ในhttp.properties
ค่านี้ระบุว่าขีดจำกัดสำหรับขนาดบรรทัดคำขอที่กำหนดค่าใน Apigee สำหรับ Private ระบบคลาวด์มีขนาด 7 KB
หากยังต้องการความช่วยเหลือจากทีมสนับสนุนของ Apigee ให้ไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย
ต้องรวบรวมข้อมูลการวินิจฉัย
รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ จากนั้นให้ติดต่อทีมสนับสนุนของ Apigee Edge
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- ทำตามคำสั่ง
curl
ในการสร้างข้อผิดพลาด414
ซ้ำ - ไฟล์การติดตามสำหรับคำขอ API
หากคุณเป็นผู้ใช้ Private Cloud ให้ระบุข้อมูลต่อไปนี้
- พบข้อความแสดงข้อผิดพลาดทั้งหมดสำหรับคำขอที่ล้มเหลว
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- แพ็กเกจพร็อกซี API
- ไฟล์การติดตามสำหรับคำขอ API ที่ล้มเหลว
- ทำตามคำสั่ง
curl
ในการสร้างข้อผิดพลาด414
ซ้ำ บันทึกการเข้าถึง 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