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 Public และ Private Cloud

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

ใช้เครื่องมือ/เทคนิคอย่างใดอย่างหนึ่งต่อไปนี้เพื่อวิเคราะห์ข้อผิดพลาดนี้

การตรวจสอบ API

วิธีวินิจฉัยข้อผิดพลาดโดยใช้ API Monitoring

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

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

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

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

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

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

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

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

    • รหัสสถานะ: 431
    • แหล่งที่มาของข้อผิดพลาด: apigee
    • Fault Code: protocol.http.TooBigHeaders
    • ความยาวคำขอ(ไบต์): 32150 (> 25 KB)
  10. หากแหล่งที่มาของข้อผิดพลาดมีค่า apigee หรือ MP แล้วรหัสข้อผิดพลาดจะมีค่า 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 ตรงกับค่าของ X-Apigee-fault-code ให้ระบุค่าของ X-Apigee-fault-code

    ตัวอย่างรายการด้านบนจากบันทึกการเข้าถึง 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 และ Request Length คือ 40 KB ซึ่งมากกว่าขีดจำกัดที่อนุญาตใน Apigee - 25 KB ซึ่งเป็นการระบุอย่างชัดเจนว่าขนาดรวมของส่วนหัวของคำขอทั้งหมดที่ส่งโดยแอปพลิเคชันไคลเอ็นต์ซึ่งเป็นส่วนหนึ่งของคำขอ HTTP เกินขีดจำกัด 25 KB ใน Apigee Edge ที่อนุญาตให้ใช้ได้

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

การวินิจฉัย

  1. กำหนดFault Code, Fault Source และขนาดคำขอความยาวสำหรับข้อผิดพลาดที่สังเกตโดยใช้ API Monitoring หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวิเคราะห์ทั่วไป
  2. หาก Fault Source มีค่า apigee หรือ MP แล้ว Fault Code จะมีค่า protocol.http.TooBigHeaders และ Request Length มากกว่า 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 ซึ่งหมายความว่ามีอักขระ ASCII เกิน 25 K (ไบต์)

      หากใช้ไคลเอ็นต์อื่นอยู่ ให้ตรวจสอบบันทึกไคลเอ็นต์และพยายามหาขนาดของบรรทัดคำขอที่ส่งไปยัง 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 Cloud คือ 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