431 ช่องส่วนหัวของคําขอใหญ่เกินไป - TooBigHeaders

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

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

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

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

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

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

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

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

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

    • รหัสสถานะ: 431
    • แหล่งที่มาของข้อผิดพลาด: apigee
    • รหัสข้อผิดพลาด: protocol.http.TooBigHeaders
    • ความยาวคำขอ(ไบต์): 32150 (> 25 KB)
  10. หากแหล่งที่มาของข้อผิดพลาดมีค่าapigee หรือ MP ค่า Fault Code มีค่า protocol.http.TooBigHeaders และ ความยาวของคำขอมากกว่า 25 KB ซึ่งบ่งชี้ว่าขนาดรวมของ ส่วนหัวของคำขอทั้งหมดที่ส่งโดยแอปพลิเคชันไคลเอ็นต์โดยเป็นส่วนหนึ่งของคำขอ HTTP มากกว่า ขีดจำกัดที่อนุญาตใน Apigee

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

NGINX

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

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

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

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

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

สาเหตุ: ส่วนหัวของคำขอเกินขีดจำกัดที่อนุญาต

การวินิจฉัย

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

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

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

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

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

    "faultstring":"request headers size exceeding 25,600"
    

    คำขอจริง

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

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

    1. ยืนยันขนาดของส่วนหัวที่ส่งไปในคำขอ
    2. ถ้าคุณพบว่าขนาดทั้งหมดของส่วนหัวใหญ่กว่า ขีดจำกัดที่อนุญาตใน 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

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

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

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

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

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

    curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
    
  3. หากต้องการส่งส่วนหัวเกินขีดจำกัดที่อนุญาต ให้ไปที่ ตัวเลือกถัดไป

CwC

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

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

จำกัดสูงสุด

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

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

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

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

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