คุณกำลังดูเอกสารประกอบของ 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
- ลงชื่อเข้าใช้บัญชี Apigee Edge
เปลี่ยนเป็นองค์กรที่คุณต้องการตรวจสอบปัญหา:
- ไปที่หน้าวิเคราะห์ > การตรวจสอบ API > ตรวจสอบ
- เลือกกรอบเวลาเฉพาะที่คุณพบข้อผิดพลาด
- ตรวจสอบว่าตั้งค่าตัวกรองพร็อกซีเป็นทั้งหมด
- พล็อตโค้ดข้อผิดพลาดเทียบกับเวลา
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.UnsupportedEncoding
ดังที่แสดงด้านล่างข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.UnsupportedEncoding
จะแสดงดังนี้:คลิกดูบันทึก แล้วขยายคำขอหนึ่งที่ล้มเหลวโดยมีข้อผิดพลาด
415
เพื่อดูข้อมูลเพิ่มเติม- ดูรายละเอียดต่อไปนี้จากหน้าต่าง Logs
- Fault Source: ค่านี้แสดงให้เห็นว่าข้อผิดพลาดแสดงผลโดย
apigee
หรือtarget
- Fault Code: ควรตรงกับ
protocol.http.UnsupportedEncoding
- Fault Source: ค่านี้แสดงให้เห็นว่าข้อผิดพลาดแสดงผลโดย
- หากแหล่งที่มาของข้อผิดพลาดคือ
apigee
แสดงว่าคําขอมีการเข้ารหัสที่ไม่รองรับในส่วนหัวContent-Encoding
- หากแหล่งที่มาของข้อผิดพลาดคือ
target
แสดงว่าการตอบกลับของเซิร์ฟเวอร์แบ็กเอนด์มีการเข้ารหัสที่ไม่รองรับในส่วนหัวContent-Encoding
เครื่องมือการติดตาม
วิธีวินิจฉัยข้อผิดพลาดโดยใช้เครื่องมือติดตาม
- เปิดใช้
เซสชันการติดตามและดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้
- รอจนกว่าจะเกิดข้อผิดพลาด
415 Unsupported Media Type
หรือ - หากคุณทำให้ปัญหาเกิดซ้ำได้ ให้เรียก API เพื่อจำลองข้อผิดพลาด
415 Unsupported Media Type
- รอจนกว่าจะเกิดข้อผิดพลาด
ตรวจสอบว่าเปิดใช้ Show FlowInfos ทั้งหมด แล้ว ดังนี้
- เลือกคำขอที่ล้มเหลว 1 รายการและตรวจสอบการติดตาม
- เลื่อนดูการติดตามระยะต่างๆ และค้นหาตำแหน่งที่เกิดข้อผิดพลาด
โดยทั่วไปคุณจะพบข้อผิดพลาดในขั้นตอนหลังช่วงคำขอที่ส่งไปยังเซิร์ฟเวอร์เป้าหมายดังที่แสดงด้านล่าง
บันทึกค่าของข้อผิดพลาดจากการติดตาม
การติดตามตัวอย่างด้านบนแสดงข้อผิดพลาดเป็น
Unsupported Encoding "utf-8"
เนื่องจากข้อผิดพลาดเกิดขึ้นโดย Apigee หลังจากส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์แล้ว จะบ่งชี้ว่าเซิร์ฟเวอร์แบ็กเอนด์ส่งส่วนหัวการตอบกลับContent-Encoding
ด้วยค่า"utf-8"
ซึ่งไม่ใช่การเข้ารหัสที่รองรับใน Apigee- ไปที่เฟส AX (บันทึกข้อมูล Analytics) ในการติดตามแล้วคลิกเลือกดังกล่าว
เลื่อนลงไปที่ส่วน Error / Response Headers ในแผง Phase Details และระบุค่าของ X-Apigee-fault-code และ X-Apigee-fault-source ดังที่แสดงด้านล่าง
คุณจะเห็นค่าของ 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
- ตรวจสอบว่าคุณใช้
เชนพร็อกซีอยู่หรือไม่ กล่าวคือกรณีที่เซิร์ฟเวอร์เป้าหมาย/ปลายทางเป้าหมายเรียกใช้พร็อกซีอื่นใน Apigee
หากต้องการตรวจสอบเรื่องนี้ ให้กลับไปที่เฟสคำขอที่ส่งไปยังเซิร์ฟเวอร์เป้าหมาย คลิกแสดง Curl
- หน้าต่าง Curl for Request sent to Target Server จะเปิดขึ้นเพื่อให้คุณระบุชื่อแทนโฮสต์ของเซิร์ฟเวอร์เป้าหมายได้
- หากชื่อแทนโฮสต์ของเซิร์ฟเวอร์เป้าหมายชี้ไปที่ชื่อแทนโฮสต์เสมือน แสดงว่าเป็นเชนพร็อกซี ในกรณีนี้ คุณต้องทำตามขั้นตอนข้างต้นทั้งหมดซ้ำสำหรับพร็อกซีที่ผูกไว้จนกว่าจะพบสาเหตุของข้อผิดพลาด
415 Unsupported Media Type
ที่แท้จริง - หากชื่อแทนโฮสต์ของเซิร์ฟเวอร์เป้าหมายชี้ไปที่เซิร์ฟเวอร์แบ็กเอนด์ของคุณแสดงว่าเซิร์ฟเวอร์แบ็กเอนด์กําลังส่งการเข้ารหัสที่ไม่รองรับไปยัง Apigee
บันทึกการเข้าถึง Nginix
วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX
- หากเป็นผู้ใช้ Private Cloud คุณจะใช้บันทึกการเข้าถึง NGINX เพื่อระบุข้อมูลสำคัญเกี่ยวกับข้อผิดพลาด HTTP
415
ได้ ตรวจสอบบันทึกการเข้าถึง NGINX ดังนี้
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- ค้นหาข้อผิดพลาด
415
รายการในช่วงเวลาที่ระบุ (หากปัญหาเกิดขึ้นในอดีต) หรือยังมีคำขอใดที่ยังคงล้มเหลวเมื่อใช้415
หากพบข้อผิดพลาด
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
ด้วย
สาเหตุ: การเข้ารหัสที่ไม่รองรับในคำขอ
การวินิจฉัย
- ระบุ Fault Code และ Fault Source สำหรับข้อผิดพลาดที่พบโดยใช้ API Monitoring หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยทั่วไป
- หากรหัสข้อผิดพลาดคือ
protocol.http.UnsupportedEncoding
และแหล่งที่มาของข้อผิดพลาดมีค่าapigee
หรือMP
แสดงว่าคำขอที่ส่งโดยแอปพลิเคชันไคลเอ็นต์มีการเข้ารหัสที่ไม่รองรับในส่วนหัวของคำขอContent-Encoding
- คุณระบุค่าของการเข้ารหัสที่ไม่รองรับซึ่งส่งผ่านเป็นส่วนหนึ่งของคำขอ HTTP ได้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
ข้อความแสดงข้อผิดพลาด
การใช้ข้อความแสดงข้อผิดพลาดหากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge โปรดดู
faultstring
faultstring
มีค่าการเข้ารหัสที่ไม่รองรับตัวอย่างข้อความแสดงข้อผิดพลาด
"faultstring":"Unsupported Encoding \"UTF-8\""
ในข้อความแสดงข้อผิดพลาดข้างต้น สังเกตว่าค่าของการเข้ารหัสที่ไม่รองรับคือ
“UTF-8”
ดังที่เห็นในfaultstring
เนื่องจาก
“UTF-8”
ไม่ใช่การเข้ารหัสที่รองรับใน Apigee Edge คำขอนี้จึงล้มเหลวโดยมีข้อผิดพลาด415 Unsupported Media Type
โดยมีรหัสข้อผิดพลาดprotocol.http.UnsupportedEncoding
คำขอจริง
การใช้คำขอจริงให้ทำดังนี้- หากคุณไม่มีสิทธิ์เข้าถึงคำขอจริงจากแอปพลิเคชันไคลเอ็นต์ ให้ไปที่การแก้ปัญหา
- หากคุณมีสิทธิ์เข้าถึงคำขอจริงจากแอปพลิเคชันไคลเอ็นต์ ให้ทำตามขั้นตอนต่อไปนี้
- ระบุค่าที่ส่งไปยังส่วนหัวของคำขอ
Content-Encoding.
- หากค่าที่ส่งไปยังส่วนหัวของคำขอ
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
- ระบุค่าที่ส่งไปยังส่วนหัวของคำขอ
ความละเอียด
- โปรดดูรายการการเข้ารหัสที่ Apigee รองรับในการเข้ารหัสที่รองรับ
- ตรวจสอบว่าแอปพลิเคชันไคลเอ็นต์ส่งข้อมูลต่อไปนี้เสมอ
- เฉพาะการเข้ารหัสที่รองรับเป็นค่าสำหรับส่วนหัว
Content-Encoding
ในคำขอ - เปย์โหลดคำขอในรูปแบบที่รองรับไปยัง Apigee Edge และตรงกับรูปแบบที่ระบุในส่วนหัว
Content-Encoding
- เฉพาะการเข้ารหัสที่รองรับเป็นค่าสำหรับส่วนหัว
ในตัวอย่างข้างต้น เพย์โหลดคำขอมีส่วนขยาย
gz
ซึ่งระบุว่าเนื้อหาต้องเป็นgzip
คุณแก้ไขปัญหาได้โดยการส่งส่วนหัวของคำขอเป็นContent-Encoding: gzip
และเพย์โหลดคำขอในรูปแบบgzip
ดังนี้curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
สาเหตุ: การเข้ารหัสที่ไม่รองรับในการตอบกลับ
การวินิจฉัย
- ระบุ Fault Code และ Fault Source สำหรับข้อผิดพลาดที่พบโดยใช้ API Monitoring, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวิเคราะห์ทั่วไป
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
target
แสดงว่าการตอบกลับที่ส่งโดยเซิร์ฟเวอร์แบ็กเอนด์มีการเข้ารหัสที่ไม่รองรับในส่วนหัวContent-Encoding
- คุณระบุค่าของการเข้ารหัสที่ไม่รองรับซึ่งส่งเป็นส่วนหนึ่งของการตอบสนอง HTTP จากเซิร์ฟเวอร์แบ็กเอนด์ได้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
ข้อความแสดงข้อผิดพลาด
การใช้ข้อความแสดงข้อผิดพลาดหากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge โปรดดู
faultstring
faultstring
มีค่าของการเข้ารหัสที่ไม่รองรับตัวอย่างข้อความแสดงข้อผิดพลาด
"faultstring":"Unsupported Encoding \"UTF-8\""
-
ในข้อความแสดงข้อผิดพลาดข้างต้น สังเกตว่าค่าของการเข้ารหัสที่ไม่รองรับคือ
“UTF-8”
ดังที่เห็นในfaultstring
เนื่องจาก
“UTF-8”
ไม่ใช่การเข้ารหัสที่รองรับใน Apigee Edge คำขอนี้จึงไม่สำเร็จโดยมีข้อผิดพลาด415 Unsupported Media Type
โดยมีรหัสข้อผิดพลาดprotocol.http.UnsupportedEncoding
เครื่องมือการติดตาม
การใช้การติดตาม- หากคุณไม่มีการติดตามสำหรับคำขอที่ล้มเหลว ให้ไปที่การแก้ไข
- หากคุณได้บันทึกการติดตามสำหรับความล้มเหลว คุณจะระบุการเข้ารหัสที่ไม่รองรับซึ่งเซิร์ฟเวอร์แบ็กเอนด์ส่งมาให้เป็นส่วนหนึ่งของส่วนหัวการตอบกลับ
Content-Encoding
ได้ตามที่อธิบายไว้ในเครื่องมือติดตาม
ความละเอียด
- โปรดดูรายการการเข้ารหัสที่ Apigee รองรับในการเข้ารหัสที่รองรับ
- ตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ส่งข้อมูลต่อไปนี้เสมอ
- เฉพาะการเข้ารหัสที่รองรับเป็นค่าของส่วนหัว
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