415 ไม่รองรับประเภทสื่อ - การเข้ารหัสที่ไม่รองรับ

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

ลักษณะปัญหา

แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 415 Unsupported Media Type ด้วย protocol.http.UnsupportedEncoding เป็นการตอบกลับการเรียก API

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

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

HTTP/1.1 415 Unsupported Media Type

นอกจากนี้ คุณอาจสังเกตเห็นข้อความแสดงข้อผิดพลาดที่คล้ายกับข้อความด้านล่าง:

{
   "fault":{
      "faultstring":"Unsupported Encoding \"UTF-8\"",
      "detail":{
         "errorcode":"protocol.http.UnsupportedEncoding"
      }
   }
}

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

ข้อผิดพลาดนี้เกิดขึ้นหากค่าของส่วนหัว Content-Encoding ที่ระบุไว้ใน คำขอ HTTP ที่ไคลเอ็นต์ส่งไปยัง Apigee หรือการตอบกลับ HTTP ที่เซิร์ฟเวอร์แบ็กเอนด์ส่งเพื่อ Apigee ไม่มีส่วน การเข้ารหัสที่รองรับโดย Apigee ตามข้อกำหนด RFC 7231 ส่วน 6.5.13: 415 ประเภทสื่อที่ไม่รองรับ

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

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

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

หากต้องการวินิจฉัยข้อผิดพลาด คุณสามารถใช้วิธีการใดก็ได้ต่อไปนี้

การตรวจสอบ API

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

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

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

    เลือกเซลล์โค้ดความผิดพลาดแล้ว
  8. ข้อมูลเกี่ยวกับรหัสข้อผิดพลาด protocol.http.UnsupportedEncoding แสดงอยู่ด้านล่าง

  9. คลิกดูบันทึก และขยายคำขอที่ดำเนินการไม่สำเร็จด้วย 415 เกิดข้อผิดพลาดในการดูข้อมูลเพิ่มเติม:

  10. จากหน้าต่าง Logs ให้จดรายละเอียดต่อไปนี้
    • แหล่งที่มาของข้อผิดพลาด: ข้อความนี้จะแสดงว่า apigee แสดงผลข้อผิดพลาด หรือ target
    • Fault Code: ควรตรงกับ protocol.http.UnsupportedEncoding
  11. หากแหล่งที่มาของข้อผิดพลาดคือ apigee ก็แสดงว่าคำขอ มีการเข้ารหัสที่ไม่รองรับในส่วนหัว Content-Encoding
  12. หากแหล่งที่มาของข้อผิดพลาดคือ target แสดงว่าเซิร์ฟเวอร์แบ็กเอนด์ การตอบกลับมีการเข้ารหัสที่ไม่รองรับในส่วนหัว Content-Encoding

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

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

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

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

  6. จดค่าของข้อผิดพลาดจากการติดตาม

    การติดตามตัวอย่างด้านบนแสดงข้อผิดพลาดเป็น Unsupported Encoding "utf-8" ตั้งแต่ปี Apigee คือข้อผิดพลาดที่เพิ่มขึ้นหลังจากที่ส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์และระบุ ที่เซิร์ฟเวอร์แบ็กเอนด์ได้ส่งส่วนหัวการตอบกลับ Content-Encoding พร้อมค่า ของ "utf-8" ซึ่งไม่ใช่ การเข้ารหัสที่รองรับใน Apigee

  7. ไปที่ระยะ AX (Analytics Data Recorded) ในการติดตามและคลิก
  8. เลื่อนลงไปที่ส่วนข้อผิดพลาด / ส่วนหัวการตอบกลับในรายละเอียดระยะ ของแผงควบคุมและระบุ ค่าของ X-Apigee-fault-code และ X-Apigee-fault-source ดังที่แสดงด้านล่าง

  9. คุณจะเห็นค่าของ X-Apigee-fault-code และ X-Apigee-fault-source เป็น protocol.http.UnsupportedEncoding และ target ซึ่งแสดงว่า เนื่องจากมีการส่งค่าการเข้ารหัสที่ไม่รองรับ "utf-8" ด้วยแอตทริบิวต์ เซิร์ฟเวอร์แบ็กเอนด์ในส่วนหัวการตอบกลับ Content-Encoding

    ส่วนหัวการตอบกลับ ค่า
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

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

    2. หน้าต่าง Curl for Request Sent to Target Server จะเปิดขึ้นเพื่อให้คุณทำตามขั้นตอนต่อไปนี้ได้ กำหนดชื่อแทนของโฮสต์เซิร์ฟเวอร์เป้าหมาย
    3. หากชื่อแทนโฮสต์ของเซิร์ฟเวอร์เป้าหมายชี้ไปยังชื่อแทนโฮสต์เสมือน แสดงว่าพร็อกซีนั้นคือพร็อกซี การทำสายโซ่ ในกรณีนี้ คุณต้องทำขั้นตอนด้านบนทั้งหมดซ้ำสำหรับพร็อกซีที่มีการเชื่อมโยงจนกว่า คุณจะทราบได้ว่าอะไรคือสาเหตุของข้อผิดพลาด 415 Unsupported Media Type ที่แท้จริง
    4. หากชื่อแทนโฮสต์ของเซิร์ฟเวอร์เป้าหมายชี้ไปยังเซิร์ฟเวอร์แบ็กเอนด์ แสดงว่านั่นเป็นการระบุ เซิร์ฟเวอร์แบ็กเอนด์ของคุณกำลังส่งการเข้ารหัสที่ไม่รองรับไปยัง Apigee

บันทึกการเข้าถึงของ Nginix

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

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

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

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

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

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

    ส่วนหัวการตอบกลับ ค่า
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source MP

    X-Apigee-fault-source อาจมีค่า target อยู่ด้วย

สาเหตุ: การเข้ารหัสที่ไม่รองรับในคำขอ

การวินิจฉัย

  1. กำหนดรหัสข้อผิดพลาดและแหล่งที่มาของข้อผิดพลาดสำหรับข้อผิดพลาดที่พบโดยใช้ API การตรวจสอบบันทึกการเข้าถึงหรือ NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยทั่วไป
  2. หากรหัสข้อผิดพลาดคือ protocol.http.UnsupportedEncoding และข้อผิดพลาด แหล่งที่มามีค่า apigee หรือ MP ซึ่งบ่งบอกว่าพารามิเตอร์ คำขอที่ส่งโดยแอปพลิเคชันไคลเอ็นต์มีการเข้ารหัสที่ไม่รองรับในส่วนหัวของคำขอ Content-Encoding
  3. คุณระบุค่าของการเข้ารหัสที่ไม่รองรับที่ส่งผ่านเป็นส่วนหนึ่งของคำขอ HTTP ได้ โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้

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

    ใช้ข้อความแสดงข้อผิดพลาดดังนี้
    1. หากคุณสามารถเข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge ได้ โปรดดู เป็น faultstring faultstring มีค่าของ การเข้ารหัสจบ

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

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. ในข้อความแสดงข้อผิดพลาดข้างต้น คุณจะเห็นว่าค่าของการเข้ารหัสที่ไม่รองรับ “UTF-8” ตามที่เห็นใน faultstring

      เนื่องจาก “UTF-8” ไม่ใช่การเข้ารหัสที่รองรับใน Apigee Edge คำขอนี้ ล้มเหลวโดยมีข้อผิดพลาด 415 Unsupported Media Type ที่มีรหัสข้อผิดพลาด: protocol.http.UnsupportedEncoding

    คำขอจริง

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

        ตัวอย่างคำขอ

        curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: UTF-8" -X POST -d @request_payload.gz

        คำขอตัวอย่างข้างต้นจะส่งค่า "UTF-8" ไปยังส่วนหัว Content- Encoding ซึ่งไม่ใช่ การเข้ารหัสที่รองรับใน Apigee Edge ดังนั้นคำขอนี้จึงล้มเหลวโดยมีข้อผิดพลาด 415 Unsupported Media Type ที่มีรหัสข้อผิดพลาด: protocol.http.UnsupportedEncoding

ความละเอียด

  1. โปรดดูรายการการเข้ารหัสที่ Apigee รองรับใน การเข้ารหัสที่รองรับ
  2. ตรวจสอบว่าแอปพลิเคชันไคลเอ็นต์ส่งข้อมูลต่อไปนี้เสมอ
    • เฉพาะการเข้ารหัสที่รองรับเป็นค่าสำหรับส่วนหัว Content-Encoding ใน คำขอ
    • เพย์โหลดคำขอในรูปแบบที่รองรับไปยัง Apigee Edge และตรงกับรูปแบบดังกล่าว ที่ระบุไว้ในส่วนหัว Content-Encoding
  3. ในตัวอย่างข้างต้น เพย์โหลดคำขอมีส่วนขยาย gz ซึ่งระบุ เนื้อหาต้องเป็น gzip คุณจะแก้ไขปัญหาได้โดยส่งส่วนหัวของคำขอ เป็น Content-Encoding: gzip และเพย์โหลดคำขอในรูปแบบ gzip:

    curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
    

สาเหตุ: ไม่รองรับการเข้ารหัสในการตอบกลับ

การวินิจฉัย

  1. กำหนดรหัสข้อผิดพลาดและแหล่งที่มาของข้อผิดพลาดสำหรับข้อผิดพลาดที่พบโดยใช้ API การตรวจสอบ เครื่องมือการติดตาม หรือบันทึกการเข้าถึงของ NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
  2. หาก Fault Source มีค่า target ก็จะแสดงค่าว่า การตอบกลับที่ส่งโดยเซิร์ฟเวอร์แบ็กเอนด์มีการเข้ารหัสที่ไม่ได้รับการสนับสนุนใน ส่วนหัว Content-Encoding
  3. คุณสามารถกำหนดค่าของการเข้ารหัสที่ไม่รองรับซึ่งส่งผ่านเป็นส่วนหนึ่งของการตอบสนอง HTTP จาก เซิร์ฟเวอร์แบ็กเอนด์โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้

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

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

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

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. ในข้อความแสดงข้อผิดพลาดข้างต้น คุณจะเห็นว่าค่าของการเข้ารหัสที่ไม่รองรับ “UTF-8” ตามที่เห็นใน faultstring

      เนื่องจาก “UTF-8” ไม่ใช่การเข้ารหัสที่รองรับใน Apigee Edge คำขอล้มเหลวโดยมีข้อผิดพลาด 415 Unsupported Media Type รายการ รหัสข้อผิดพลาด: protocol.http.UnsupportedEncoding

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

    เมื่อใช้ Trace
    1. หากไม่มีการติดตามสำหรับคำขอที่ล้มเหลว ให้ไปที่ การแก้ปัญหา
    2. หากคุณได้บันทึกการติดตามสำหรับความล้มเหลวไว้ คุณสามารถตรวจสอบไฟล์ การเข้ารหัสที่ส่งผ่านโดยเซิร์ฟเวอร์แบ็กเอนด์โดยเป็นส่วนหนึ่งของการตอบสนองของ Content-Encoding ตามที่อธิบายไว้ในเครื่องมือการติดตาม

ความละเอียด

  1. โปรดดูรายการการเข้ารหัสที่ Apigee รองรับใน การเข้ารหัสที่รองรับ
  2. ตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ส่งข้อมูลต่อไปนี้เสมอ
    • เฉพาะการเข้ารหัสที่รองรับเป็นค่าของ ส่วนหัว Content-Encoding ในคำขอ
    • เพย์โหลดการตอบกลับในรูปแบบที่รองรับไปยัง Apigee Edge และตรงกับรูปแบบดังกล่าว ที่ระบุไว้ในส่วนหัว Content-Encoding

การเข้ารหัสที่รองรับ

ตารางต่อไปนี้แสดงรูปแบบการเข้ารหัสที่ Apigee Edge รองรับ

ส่วนหัว การเข้ารหัส คำอธิบาย
Content-Encoding gzip รูปแบบ Unix gzip
deflate รูปแบบนี้ใช้โครงสร้าง zlib ที่มีอัลกอริทึมการบีบอัดแบบ Deflate

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

Apigee จะใช้การตอบกลับด้วยข้อผิดพลาด 415 Unsupported Media Type ตาม ข้อกำหนด RFC ต่อไปนี้

ข้อมูลจำเพาะ
RFC 7231 ส่วน 6.5.13: 415 ประเภทสื่อที่ไม่รองรับ

สิ่งสำคัญที่ควรทราบ

โปรดทราบดังต่อไปนี้

  • หาก Apigee แสดงข้อผิดพลาด 415 เนื่องจากมีการส่งการเข้ารหัสที่ไม่รองรับ ส่วนหัว Content-Encoding เป็นส่วนหนึ่งของคำขอ API จากนั้นให้ทำดังนี้
    • คุณจะติดตามการติดตามสำหรับคำขอนี้ไม่ได้
    • คุณจะไม่สามารถแก้ไขรูปแบบหรือเนื้อหาของการตอบกลับข้อผิดพลาดที่ส่งโดย Apigee Edge ที่ใช้นโยบายต่างๆ เช่น RaiseFault, AssignMessage

    เนื่องจากข้อผิดพลาดนี้เกิดขึ้นในระยะเริ่มต้นในโปรแกรมประมวลผลข้อความ สามารถดำเนินการตามนโยบายได้

  • หาก Apigee แสดงข้อผิดพลาด 415 เนื่องจากมีการส่งการเข้ารหัสที่ไม่รองรับ ในส่วนหัวการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์ แล้วจะต้องมีการแก้ไขใน เซิร์ฟเวอร์แบ็กเอนด์เพื่อหลีกเลี่ยงข้อผิดพลาดนี้ โปรดทํางานร่วมกับทีมแบ็กเอนด์ตามความเหมาะสมเพื่อ แก้ไขปัญหานี้

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

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

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

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

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

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

  • พบข้อความแสดงข้อผิดพลาดทั้งหมดสำหรับคำขอที่ล้มเหลว
  • ชื่อสภาพแวดล้อม
  • แพ็กเกจพร็อกซี API
  • ไฟล์การติดตามสำหรับคำขอ API
  • บันทึกการเข้าถึง 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