414 Request-URI ยาวเกินไป - TooBigLine

คุณกำลังดูเอกสารประกอบ 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 ส่วน ดังนี้

  1. บรรทัดคําขอ
  2. ( ชุดส่วนหัว HTTP )
  3. [ เนื้อความ ]

บรรทัดคําขอประกอบด้วย 3 ส่วนดังที่แสดงด้านล่าง

Request-Line = <Method> <Request-URI> <HTTP-Version>

เมื่อแอปพลิเคชันไคลเอ็นต์ส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์ บรรทัดแรกที่ไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์มี Request-Line ตามที่อธิบายข้างต้น ตามด้วย ส่วนหัวและเนื้อหาคำขอ/เพย์โหลด

ภาพหน้าจอตัวอย่างต่อไปนี้แสดงคำขอ curl ทั่วไป ซึ่งก็คือ คำขอ (พร้อมด้วย Request-Line) และส่วน Response

ทำความเข้าใจเกี่ยวกับขนาดบรรทัดของคำขอ

  1. ในตัวอย่างที่พูดถึงข้างต้น บรรทัด start (บรรทัดแรก) ในคำขอยัง ซึ่งเรียกว่า Request-Line ดังนี้
    GET /test/ HTTP/1.1
    

    ขนาดของบรรทัดคำขอคือ ~19 bytes เนื่องจากมี 19 ASCII characters เนื่องจากอยู่ในระยะ ขีดจำกัดที่อนุญาตใน Apigee Edge ระบบจะดำเนินการกับคำขอโดยไม่มีข้อผิดพลาด และได้รับคำตอบที่ประสบความสำเร็จ

  2. ในทำนองเดียวกัน หากคุณดูที่ faultstring ในส่วน ข้อความแสดงข้อผิดพลาดที่แสดงด้านบน มีข้อความแสดงข้อผิดพลาด "request line size exceeding 7,168" ซึ่งหมายความว่า "บรรทัดคำขอ" ในคำขอ HTTP ที่ไคลเอ็นต์สร้างขึ้นเกิน 7,168 ไบต์

สาเหตุที่เป็นไปได้สำหรับข้อผิดพลาดนี้มีดังนี้

สาเหตุ คำอธิบาย วิธีการแก้ปัญหาสำหรับ
ขนาดเพย์โหลดคำขอเกินขีดจำกัดที่อนุญาต ขนาดของ Request-URI ที่ส่งโดยแอปพลิเคชันไคลเอ็นต์โดยเป็นส่วนหนึ่งของ HTTP คำขอไปยัง Apigee Edge สูงกว่าขีดจำกัดที่อนุญาตใน Apigee Edge ผู้ใช้ Edge สาธารณะและ Private Cloud

ขั้นตอนการวินิจฉัยทั่วไป

ใช้เครื่องมือ/เทคนิคต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้

การตรวจสอบ API

วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API

  1. ลงชื่อเข้าใช้ Apigee Edge UI ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
  2. เปลี่ยนเป็นองค์กรที่ต้องการตรวจสอบปัญหา

  3. ไปที่ วิเคราะห์ > การตรวจสอบ API > หน้าตรวจสอบ
  4. เลือกกรอบเวลาที่คุณพบข้อผิดพลาด
  5. พล็อตรหัสข้อผิดพลาดเทียบกับเวลา
  6. เลือกเซลล์ที่มีรหัสข้อผิดพลาด protocol.http.TooBigLine และ รหัสสถานะ 414 ดังที่แสดงด้านล่าง

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  7. คุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด protocol.http.TooBigline ดังที่แสดงด้านล่าง

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  8. คลิกดูบันทึกและขยายแถวสำหรับคำขอที่ล้มเหลว

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  9. จากหน้าต่าง Logs ให้จดรายละเอียดต่อไปนี้

    • รหัสสถานะ: 414
    • แหล่งที่มาของข้อผิดพลาด: apigee
    • รหัสข้อผิดพลาด: protocol.http.TooBigLine
    • ความยาวคำขอ(ไบต์): 7244 (> 7KB)
  10. หากแหล่งที่มาของข้อผิดพลาดมีค่าapigee หรือ MP ค่า Fault Code มีค่า protocol.http.TooBigLine และ Request-Length คือมากกว่า 7 KB ซึ่งหมายความว่าคำขอ HTTP จากไคลเอ็นต์มี URI คำขอมากกว่า ขีดจำกัดที่อนุญาตใน Apigee

เครื่องมือการติดตาม

NGINX

วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX

  1. หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกการเข้าถึง NGINX เพื่อ ระบุข้อมูลสำคัญเกี่ยวกับข้อผิดพลาด HTTP 414
  2. ตรวจสอบบันทึกการเข้าถึง NGINX ดังต่อไปนี้

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    ที่ไหน: ระบบจะแทนที่ ORG, ENV และ PORT# ด้วยค่าจริง

  3. ค้นหาเพื่อดูว่ามีข้อผิดพลาด 414 รายการเกิดขึ้นในช่วงระยะเวลาหนึ่งๆ หรือไม่ (หากเคยมีปัญหาเกิดขึ้นในอดีต) หรือหากมีคำขอที่ยังคงดำเนินการไม่สำเร็จ 414
  4. หากคุณพบข้อผิดพลาด 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 > ขีดจำกัดที่อนุญาต)

สาเหตุ: ขนาดเพย์โหลดคำขอเกินขีดจำกัดที่อนุญาต

การวินิจฉัย

  1. กำหนดรหัสข้อผิดพลาด แหล่งที่มาของข้อผิดพลาด และขนาดคำขอสำหรับค่า ข้อผิดพลาดที่พบโดยใช้การตรวจสอบ API, เครื่องมือการติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
  2. หากแหล่งที่มาของข้อผิดพลาดมีค่าapigee หรือ MP ระบุว่าขนาดคำขอที่แอปพลิเคชันไคลเอ็นต์ส่งไปยัง Apigee มีขนาดใหญ่กว่า ขีดจำกัดที่อนุญาตใน Apigee Edge
  3. คุณสามารถตรวจสอบได้ว่าบรรทัดคำขอมีขนาดเกินขีดจำกัด 7 KB ที่อนุญาตหรือไม่ โดยใช้ วิธีการต่อไปนี้

    ข้อความแสดงข้อผิดพลาด

    หากต้องการตรวจสอบโดยใช้ข้อความแสดงข้อผิดพลาด ให้ทำดังนี้

    หากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge โปรดดูที่ faultstring faultstring ระบุว่า ขนาดบรรทัดคําขอมีขนาดเกินขีดจำกัดที่อนุญาตซึ่งเท่ากับ 7 KB

    ตัวอย่างข้อความแสดงข้อผิดพลาด

    "faultstring":"request line size exceeding 7,168"
    

    คำขอจริง

    วิธีตรวจสอบโดยใช้คำขอจริงมีดังนี้

    หากคุณมีสิทธิ์เข้าถึงคำขอจริงจากแอปพลิเคชันไคลเอ็นต์ จากนั้นให้ทำตามขั้นตอนต่อไปนี้

    1. ยืนยันขนาดของ URI ที่ส่งผ่านในคำขอ
    2. หากคุณพบว่า 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

    1. ตรวจสอบบันทึกของตัวประมวลผลข้อความดังนี้

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. ค้นหาเพื่อดูว่ามีข้อผิดพลาด 414 รายการเกิดขึ้นระหว่าง ระยะเวลา (หากปัญหาเกิดขึ้นในอดีต) หรือมีคำขอ ยังคงล้มเหลวกับ 414 คุณสามารถใช้สตริงการค้นหาต่อไปนี้
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. คุณจะพบเส้นทางจาก 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 คำขอที่มีขนาดใหญ่กว่าขีดจำกัดที่อนุญาต

  1. วิเคราะห์สาเหตุที่ไคลเอ็นต์ที่ระบุส่งขนาด URI คำขอมากกว่า ขีดจำกัดที่อนุญาตตามที่ระบุไว้ในขีดจำกัด
  2. หากไม่พึงประสงค์ ให้แก้ไขแอปพลิเคชันไคลเอ็นต์เพื่อให้ส่ง URI คำขอ ขนาดน้อยกว่าขีดจำกัดที่อนุญาต

    ในตัวอย่างที่กล่าวถึงข้างต้น คุณสามารถแก้ไขปัญหาได้โดยส่งข้อความค้นหาแบบยาว เป็นส่วนหนึ่งของเนื้อหา/เพย์โหลดคำขอ แทนการส่งเป็นส่วนหนึ่งของ URL คำขอตามที่แสดงด้านล่าง:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. หากต้องการส่งไฟล์ URI ที่เกินขีดจำกัดที่อนุญาต ให้ไปที่ ตัวเลือกถัดไป

CwC

ตัวเลือกที่ 2 : ใช้พร็อพเพอร์ตี้ CwC เพื่อเพิ่มขีดจำกัดบรรทัดคำขอ

Apigee จะมอบ พร็อพเพอร์ตี้ CwC ที่ช่วยให้เพิ่มขีดจํากัดขนาดบรรทัดคําขอได้ โปรดดูรายละเอียดที่ กำหนดขีดจำกัดบรรทัดคำขอในเครื่องมือประมวลผลข้อความ

จำกัดสูงสุด

Apigee คาดว่าแอปพลิเคชันไคลเอ็นต์และเซิร์ฟเวอร์แบ็กเอนด์จะไม่ส่งคำขอ/บรรทัดการตอบกลับ ซึ่งมีขนาดเกินขีดจำกัดที่อนุญาตตามที่ระบุไว้ในเอกสารขีดจำกัดบรรทัดคำขอ/ตอบกลับ ในขีดจำกัด Apigee Edge

  1. หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ขีดจำกัดสูงสุดสำหรับคำขอและ ขนาดบรรทัดการตอบกลับได้รับการบันทึกเป็นเอกสารสำหรับขนาดคําขอ/บรรทัดการตอบกลับใน ขีดจำกัด Apigee Edge
  2. หากคุณเป็นผู้ใช้ Private Cloud คุณอาจได้แก้ไขขีดจำกัดสูงสุดเริ่มต้น ขีดจำกัดสำหรับขนาดคำขอและบรรทัดการตอบกลับ (แม้ว่าจะไม่ใช่แนวทางปฏิบัติที่แนะนำก็ตาม) คุณสามารถกำหนดขนาดสูงสุดของบรรทัดคำขอได้โดยทำตามวิธีการใน วิธีตรวจสอบขีดจำกัดปัจจุบัน

วิธีตรวจสอบขีดจำกัดปัจจุบัน

ส่วนนี้จะอธิบายวิธียืนยันว่าพร็อพเพอร์ตี้ HTTPRequest.line.limit มี อัปเดตเป็นค่าใหม่ให้กับตัวประมวลผลข้อความแล้ว

  1. ค้นหาคุณสมบัติในเครื่องประมวลผลข้อความ HTTPRequest.line.limit ในช่วง ไดเรกทอรี /opt/apigee/edge-message-processor/conf และตรวจสอบเพื่อ ให้ดูค่าที่ตั้งไว้ตามที่แสดงด้านล่าง
    grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
    
  2. ตัวอย่างผลลัพธ์จากคำสั่งด้านบนมีดังนี้
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
    
  3. ในตัวอย่างเอาต์พุตด้านบน โปรดทราบว่าพร็อพเพอร์ตี้ 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