502 เกตเวย์ไม่ถูกต้อง - ResponseWithBody

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

ลักษณะปัญหา

แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP เป็น 502 Bad Gateway พร้อมรหัสข้อผิดพลาด protocol.http.ResponseWithBody เป็นการตอบกลับสำหรับการเรียก API

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

แอปพลิเคชันไคลเอ็นต์ได้รับโค้ดตอบกลับต่อไปนี้

HTTP/1.1 502 Bad Gateway

นอกจากนี้ คุณอาจเห็นข้อความแสดงข้อผิดพลาดข้อความใดข้อความหนึ่งต่อไปนี้

{
   "fault":{
      "faultstring":"Received 204 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}
{
   "fault":{
      "faultstring":"Received 205 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}

สาเหตุที่เป็นไปได้

ข้อผิดพลาดนี้เกิดขึ้นหากการตอบกลับ HTTP จากเซิร์ฟเวอร์แบ็กเอนด์ไปยัง Apigee Edge เป็น 204 No Content หรือ 205 Reset Content แต่มีการตอบกลับเนื้อหา และ/หรือส่วนหัวต่อไปนี้อย่างน้อย 1 รายการ

  • Content-Length
  • Content-Encoding
  • Transfer-Encoding

ตามข้อกำหนด RFC 7231, section 6.3.5: 204 No Content และ RFC 7231, section 6.3.6: 205 Reset Content เซิร์ฟเวอร์ต้นทางไม่ควรส่งเนื้อหาเพิ่มเติม เป็นส่วนหนึ่งของเนื้อหาการตอบกลับที่มีรหัสสถานะ 204 No Content หรือ 205 Reset Content ส่วนหัวการตอบกลับ เช่น Content-Length, Content-Encoding หรือ Transfer-Encoding จะระบุขนาด ประเภท หรือรูปแบบของเนื้อหาการตอบกลับ

ดังนั้น Apigee Edge จะแสดงรหัสสถานะ 502 Bad Gateway พร้อมรหัสข้อผิดพลาด protocol.http.ResponseWithBody ไปยังไคลเอ็นต์ในกรณีต่อไปนี้

รหัสสถานะจากเซิร์ฟเวอร์แบ็กเอนด์
การตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์มี 204 No Content 205 Reset Content
เนื้อหาการตอบกลับ ข้อผิดพลาด ข้อผิดพลาด

ส่วนหัว Content-Length

(ตั้งค่าเป็นค่าที่ไม่ใช่ 0)

ข้อผิดพลาด ข้อผิดพลาด

Content-Encoding

(ตั้งค่าเป็น การเข้ารหัสที่รองรับใน Apigee Edge)

ข้อผิดพลาด ไม่มีข้อผิดพลาด
Transfer-Encoding ข้อผิดพลาด ข้อผิดพลาด

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

สาเหตุ คำอธิบาย วิธีการแก้ปัญหาที่ใช้ได้กับ
เนื้อหาการตอบกลับหรือส่วนหัวที่มีการตอบกลับ 204 จากเซิร์ฟเวอร์แบ็กเอนด์ เซิร์ฟเวอร์แบ็กเอนด์ส่งการตอบกลับ 204 No Content หรือ 205 Reset Content พร้อมเนื้อหาการตอบกลับและ/หรือส่วนหัว Content-Type, Content-Encoding หรือ Transfer-Encoding อย่างน้อย 1 รายการ ผู้ใช้ Edge Public และ Private Cloud

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

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

การตรวจสอบ API

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

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

  3. ไปที่หน้า Analyze > API Monitoring > Investigate
  4. เลือกกรอบเวลาที่เฉพาะเจาะจงซึ่งคุณพบข้อผิดพลาด
  5. พล็อต Fault Code เทียบกับ Time
  6. เลือกเซลล์ที่มีรหัสข้อผิดพลาด protocol.http.ResponseWithBody ดังที่ แสดงด้านล่าง

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

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

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

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

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

  9. จากหน้าต่างบันทึก ให้จดรายละเอียดต่อไปนี้
    • รหัสสถานะ: 502
    • แหล่งที่มาของข้อผิดพลาด: target
    • รหัสข้อผิดพลาด: protocol.http.ResponseWithBody
  10. หากแหล่งที่มาของข้อผิดพลาด มีค่าเป็น target และรหัสข้อผิดพลาด มีค่าเป็น protocol.http.ResponseWithBody แสดงว่าข้อผิดพลาดเกิดขึ้นเนื่องจากเซิร์ฟเวอร์แบ็กเอนด์ส่งรหัสสถานะ 204 No Content หรือ 205 Reset Content พร้อมเนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ในส่วนสาเหตุที่เป็นไปได้

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

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

  1. เปิดใช้เซสชันการติดตาม และดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้:
    1. รอให้ข้อผิดพลาด 502 Bad Gateway เกิดขึ้น หรือ
    2. หากคุณจำลองปัญหาได้ ให้เรียก API และจำลองข้อผิดพลาด 502 Bad Gateway
  2. ตรวจสอบว่าได้เปิดใช้แสดง FlowInfo ทั้งหมด แล้ว

  3. เลือกคำขอที่ไม่สำเร็จรายการใดรายการหนึ่ง แล้วตรวจสอบการติดตาม
  4. เลื่อนดูขั้นตอนต่างๆ ของการติดตามและค้นหาตำแหน่งที่เกิดข้อผิดพลาด
  5. โดยปกติแล้วคุณจะพบข้อผิดพลาดใน flowinfo Error ทันทีหลังจากขั้นตอนส่งคำขอไปยังเซิร์ฟเวอร์เป้าหมาย ดังที่แสดงด้านล่าง:

    สถานการณ์ที่ 1

    สถานการณ์ที่ 1: เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วยรหัสสถานะ 204 No Content ซึ่งมีเนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ใน สาเหตุที่เป็นไปได้

    จดค่าต่อไปนี้จากการติดตาม

    • error: Received 204 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway

    สถานการณ์ที่ 2

    สถานการณ์ที่ 2: เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วยรหัสสถานะ 204 No Content ซึ่งมีเนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ใน สาเหตุที่เป็นไปได้

    จดค่าต่อไปนี้จากการติดตาม

    • error: Received 205 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway
  6. ไปที่ขั้นตอน AX (Analytics Data Recorded) ในการติดตาม แล้วคลิก
  7. เลื่อนลงไปที่ส่วนรายละเอียดขั้นตอน ส่วนหัวข้อผิดพลาด แล้ว กำหนดค่าของ X-Apigee-fault-code และ X-Apigee-fault-source ดังที่แสดงด้านล่าง

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

  8. โปรดทราบว่าค่าของ X-Apigee-fault-code และ X-Apigee-fault-source are protocol.http.ResponseWithBody และ target ตามลำดับ ซึ่งหมายความว่าข้อผิดพลาดเกิดขึ้นเนื่องจากเซิร์ฟเวอร์แบ็กเอนด์ส่งรหัสสถานะ 204 No Content หรือ 205 Reset Content พร้อมเนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ใน สาเหตุที่เป็นไปได้
    ข้อผิดพลาด ค่า
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target

NGINX

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

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

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

    โดยที่ ORG, ENV และ PORT# จะถูกแทนที่ด้วยค่าจริง

  3. ค้นหาเพื่อดูว่ามีข้อผิดพลาด 502 ที่มีรหัสข้อผิดพลาด protocol.http.ResponseWithBody ในช่วงเวลาที่เฉพาะเจาะจง (หากปัญหาเกิดขึ้นในอดีต) หรือมีคำขอที่ยังคงล้มเหลวด้วย 502 หรือไม่
  4. หากพบข้อผิดพลาด 502 ที่มี X-Apigee-fault-code ตรงกับค่า protocol.http.ResponseWithBody ให้กำหนด ค่าของ X-Apigee-fault-source

    ตัวอย่างข้อผิดพลาด 502 จากบันทึกการเข้าถึง NGINX

    รายการตัวอย่างด้านบนจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X- Apigee-fault-code และ X-Apigee-fault-source:

    ส่วนหัวการตอบกลับ ค่า
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target
  5. โปรดทราบว่าค่าของ X-Apigee-fault-code และ X-Apigee-fault-source คือ protocol.http.ResponseWithBody และ target ตามลำดับ ซึ่งหมายความว่าข้อผิดพลาดเกิดขึ้นเนื่องจากเซิร์ฟเวอร์แบ็กเอนด์ส่งรหัสสถานะ 204 No Content หรือ 205 Reset Content พร้อมเนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ใน สาเหตุที่เป็นไปได้

สาเหตุ: เนื้อหาการตอบกลับหรือส่วนหัวที่มีการตอบกลับ 204 จากเซิร์ฟเวอร์แบ็กเอนด์

การวินิจฉัย

  1. กำหนดรหัสข้อผิดพลาด และแหล่งที่มาของข้อผิดพลาด สำหรับข้อผิดพลาดที่พบโดยใช้การตรวจสอบ API เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยทั่วไป
  2. หากรหัสข้อผิดพลาด คือ protocol.http.ResponseWithBody และ แหล่งที่มาของข้อผิดพลาด มีค่าเป็น target แสดงว่าเซิร์ฟเวอร์แบ็กเอนด์ ตอบกลับด้วยรหัสสถานะ 204 No Content หรือ 205 Reset Content พร้อม เนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ใน สาเหตุที่เป็นไปได้
  3. หากต้องการตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ส่งเนื้อหาเพย์โหลดการตอบกลับและ/หรือส่วนหัวอย่างน้อย 1 รายการที่ระบุไว้ใน สาเหตุที่เป็นไปได้ จริงหรือไม่ ให้ทำตามขั้นตอนต่อไปนี้

    1. หากคุณเป็นผู้ใช้ Public Cloud และสามารถส่งคำขอ API เดียวกันไปยัง เซิร์ฟเวอร์แบ็กเอนด์ได้โดยตรงจากระบบใดระบบหนึ่ง

    2. หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถส่งคำขอ API เดียวกันไปยัง เซิร์ฟเวอร์แบ็กเอนด์ได้โดยตรงจาก Message Processor รายการใดรายการหนึ่งที่เชื่อมโยงกับองค์กรและสภาพแวดล้อมที่เฉพาะเจาะจงซึ่งพบข้อผิดพลาด
    3. ตรวจสอบการตอบกลับที่ได้รับจากเซิร์ฟเวอร์แบ็กเอนด์และยืนยันว่ามีการตอบกลับเพย์โหลดเนื้อหาและ/หรือส่วนหัวอย่างน้อย 1 รายการที่กล่าวถึงข้างต้น หากใช่ แสดงว่านี่คือสาเหตุของข้อผิดพลาดนี้

      ตัวอย่างที่ 1

      ตัวอย่างที่ 1: การตอบกลับ 204 ของเซิร์ฟเวอร์แบ็กเอนด์พร้อมส่วนหัว Content-Encoding

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Encoding: gzip
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      ในตัวอย่างนี้ เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วย 204 No Content รหัสสถานะ และ Content-Encoding: gzip

      ตัวอย่างที่ 2

      ตัวอย่างที่ 2: การตอบกลับ 204 ของเซิร์ฟเวอร์แบ็กเอนด์พร้อมส่วนหัว Content-Length

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Length: 48
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      ในตัวอย่างนี้ เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วย 204 No Content รหัสสถานะ และ Content-Length: 48

      ตัวอย่างที่ 3

      ตัวอย่างที่ 3: การตอบกลับ 205 ของเซิร์ฟเวอร์แบ็กเอนด์พร้อมเนื้อหาการตอบกลับ

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 205 Reset Content
      < Date: Sat, 31 Jul 2021 17:14:09 GMT
      < Content-Length: 12
      < Content-Type: text/plain; charset=utf-8
      <
      * Connection #0 to host X.X.X.X left intact
      This is a sample Response
      

      ในตัวอย่างนี้ เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วย 205 Reset Content รหัสสถานะ พร้อมเนื้อหาการตอบกลับ This is a sample Response.

    4. ในตัวอย่างทั้งหมดข้างต้น เซิร์ฟเวอร์แบ็กเอนด์ส่ง 204 No Content หรือ 205 Reset Content รหัสสถานะพร้อมเนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ใน สาเหตุที่เป็นไปได้
    5. ดังนั้น Apigee Edge จึงส่ง 502 Bad Gateway รหัสสถานะพร้อมรหัสข้อผิดพลาด protocol.http.ResponseWithBody

ความละเอียด

ตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ปฏิบัติตามข้อกำหนด RFC 7231, section 6.3.6: 205 Reset Content เสมอเมื่อส่งการตอบกลับ 204 No Content หรือ 205 Reset Content ไปยัง Apigee Edge นั่นคือ เซิร์ฟเวอร์แบ็กเอนด์ ต้องไม่ ส่งข้อมูลต่อไปนี้เป็นส่วนหนึ่งของการตอบกลับ 204 No Content หรือ 205 Reset Content

  1. เนื้อหาเพย์โหลดการตอบกลับ
  2. และส่วนหัวต่อไปนี้
    1. Content-Length
    2. Content-Encoding
    3. Transfer-Encoding

ข้อมูลจำเพาะ

Apigee Edge จะตอบกลับด้วยรหัสสถานะ 502 Bad Gateway และรหัสข้อผิดพลาด protocol.http.ResponseWithBody หากเซิร์ฟเวอร์แบ็กเอนด์ส่งการตอบกลับ 204 No Content หรือ 205 Reset Content แต่ ไม่ปฏิบัติตามข้อกำหนด RFC ต่อไปนี้

ข้อมูลจำเพาะ
RFC 7231, section 6.3.5: 204 No Content
RFC 7231, section 6.3.6: 205 Reset Content

ประเด็นสำคัญที่ควรทราบ

วิธีแก้ปัญหาที่แนะนำคือการแก้ไขเซิร์ฟเวอร์แบ็กเอนด์ให้ส่งรหัสสถานะ 204 No Content และ 205 Reset Content โดยไม่มีเนื้อหาการตอบกลับและส่วนหัว Content-Length, Content-Encoding, และ Transfer-Encoding และปฏิบัติตามข้อกำหนด RFC 7231, section 6.3.5: 204 No Content และ RFC 7231, section 6.3.6: 205 Reset Content

หากยังต้องการความช่วยเหลือจากทีมสนับสนุนของ Apigee โปรดไปที่ ข้อมูลการวินิจฉัยที่ต้องรวบรวม

ข้อมูลการวินิจฉัยที่ต้องรวบรวม

รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ แล้วติดต่อ ทีมสนับสนุนของ Apigee Edge

หากคุณเป็นผู้ใช้ Public Cloud โปรดระบุข้อมูลต่อไปนี้

  • ชื่อองค์กร
  • ชื่อสภาพแวดล้อม
  • ชื่อพร็อกซี API
  • คำสั่ง curl ที่สมบูรณ์ซึ่งใช้ในการจำลองข้อผิดพลาด 502
  • ไฟล์ติดตามสำหรับคำขอ API

หากคุณเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้

  • ข้อความแสดงข้อผิดพลาดทั้งหมดที่พบสำหรับคำขอที่ไม่สำเร็จ
  • ชื่อสภาพแวดล้อม
  • แพ็กเกจพร็อกซี API
  • ไฟล์ติดตามสำหรับคำขอ API
  • บันทึกการเข้าถึง NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    โดยที่: ORG, ENV และ PORT# จะถูกแทนที่ด้วย ค่าจริง

  • บันทึกของระบบ Message Processor /opt/apigee/var/log/edge-message-processor/logs/system.log