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 Public และ Private Cloud
มีการใช้การเข้ารหัสที่ไม่รองรับในการตอบกลับ ส่วนหัวการตอบกลับของเซิร์ฟเวอร์แบ็กเอนด์ Content-Encoding มีการเข้ารหัสที่ Apigee Edge ไม่รองรับ ผู้ใช้ Edge Public และ Private Cloud

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

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

การตรวจสอบ API

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

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

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

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

  9. คลิกดูบันทึก แล้วขยายคำขอหนึ่งที่ล้มเหลวโดยมีข้อผิดพลาด 415 เพื่อดูข้อมูลเพิ่มเติม

  10. ดูรายละเอียดต่อไปนี้จากหน้าต่าง Logs
    • Fault Source: ค่านี้แสดงให้เห็นว่าข้อผิดพลาดแสดงผลโดย 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. ตรวจสอบว่าเปิดใช้ Show FlowInfos ทั้งหมด แล้ว ดังนี้

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

  6. บันทึกค่าของข้อผิดพลาดจากการติดตาม

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

  7. ไปที่เฟส AX (บันทึกข้อมูล Analytics) ในการติดตามแล้วคลิกเลือกดังกล่าว
  8. เลื่อนลงไปที่ส่วน Error / Response Headers ในแผง Phase Details และระบุค่าของ 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. ระบุ Fault Code และ Fault Source สำหรับข้อผิดพลาดที่พบโดยใช้ API Monitoring หรือบันทึกการเข้าถึง 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. ระบุ Fault Code และ Fault Source สำหรับข้อผิดพลาดที่พบโดยใช้ API Monitoring, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวิเคราะห์ทั่วไป
  2. หากแหล่งที่มาของข้อผิดพลาดมีค่า 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

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

    การใช้การติดตาม
    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