คุณกำลังดูเอกสารประกอบของ 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 )
- [ เนื้อความ ]
บรรทัดคำขอประกอบด้วยสามส่วนดังที่แสดงด้านล่าง
Request-Line = <Method> <Request-URI> <HTTP-Version>
เมื่อแอปพลิเคชันไคลเอ็นต์ส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์ บรรทัดแรกที่ไปยังเซิร์ฟเวอร์จะมี Request-Line ที่อธิบายไว้ข้างต้น ตามด้วยส่วนหัวและเนื้อหา/เพย์โหลดของคำขอ
ภาพหน้าจอตัวอย่างต่อไปนี้แสดงคําขอ curl
ทั่วไป ส่วนคําขอ (พร้อมด้วยบรรทัดคําขอ) และส่วนการตอบกลับ
ทำความเข้าใจขนาดบรรทัดคำขอ
- ในตัวอย่างที่ระบุไว้ข้างต้น บรรทัดเริ่มต้น (บรรทัดแรก) ในคำขอหรือที่เรียกว่าบรรทัดคำขอมีดังนี้
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 Public และ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคอย่างใดอย่างหนึ่งต่อไปนี้เพื่อวิเคราะห์ข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้ API Monitoring
- ลงชื่อเข้าใช้ UI ของ Apigee Edge ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่คุณต้องการตรวจสอบปัญหา
- ไปที่หน้าวิเคราะห์ > การตรวจสอบ API > ตรวจสอบ
- เลือกกรอบเวลาเฉพาะที่คุณพบข้อผิดพลาด
- พล็อตโค้ดข้อผิดพลาดเทียบกับเวลา
- เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.TooBigLine
และรหัสสถานะ414
ดังที่แสดงด้านล่าง คุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.TooBigline
ดังที่แสดงด้านล่างคลิกดูบันทึกแล้วขยายแถวสำหรับคำขอที่ไม่สำเร็จ
ดูรายละเอียดต่อไปนี้จากหน้าต่าง Logs
- รหัสสถานะ:
414
- แหล่งที่มาของข้อผิดพลาด:
apigee
- Fault Code:
protocol.http.TooBigLine
- ความยาวคำขอ(ไบต์):
7244 (> 7KB)
- รหัสสถานะ:
- หาก Fault Source มีค่า
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 ตรงกับค่าของ X-Apigee-fault-code ให้ระบุค่าของ X-Apigee-fault-codeตัวอย่างรายการด้านบนจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X-Apigee-fault-code และ X-Apigee-fault-code
ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source policy
หมายเหตุความยาวของคำขอ:
7244
(7.244KB > ขีดจำกัดที่อนุญาต)
สาเหตุ: ขนาดเปย์โหลดคำขอเกินขีดจำกัดที่อนุญาต
การวินิจฉัย
- ระบุFault Code, Fault Source และขนาด Request-Length สำหรับข้อผิดพลาดที่สังเกตจากบันทึก API Monitoring, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวิเคราะห์ทั่วไป
- หาก Fault Source มีค่า
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
- หากคุณเป็นผู้ใช้ Cloud สาธารณะ ขีดจำกัดสูงสุดสำหรับคำขอและขนาดของบรรทัดคำตอบจะบันทึกไว้สำหรับขนาดบรรทัดคำขอ/การตอบกลับในขีดจำกัดของ 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 Cloud คือ 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