Вы просматриваете документацию 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:
- Войдите в свою учетную запись Apigee Edge .
Переключитесь на организацию, в которой хотите разобраться в вопросе:

- Перейдите на страницу Анализ > Мониторинг API > Расследование .
- Выберите конкретный период времени, в течение которого вы наблюдали ошибки.
- Убедитесь, что для фильтра прокси установлено значение «Все» .
- Постройте график зависимости кода неисправности от времени .
Выберите ячейку с кодом ошибки
protocol.http.UnsupportedEncoding, как показано ниже:
Информация о коде неисправности
protocol.http.UnsupportedEncodingотображается, как показано ниже:
Нажмите « Просмотреть журналы» и разверните один из запросов, вызвавших ошибку
415, чтобы просмотреть дополнительную информацию:
- В окне «Журналы» обратите внимание на следующие детали:
- Источник ошибки: показывает, что ошибка возвращается
apigeeилиtarget. - Код ошибки: он должен соответствовать
protocol.http.UnsupportedEncoding.
- Источник ошибки: показывает, что ошибка возвращается
- Если источником ошибки является
apigee, это означает, что запрос содержал неподдерживаемую кодировку в заголовкеContent-Encoding. - Если источником ошибки является
target, это означает, что ответ внутреннего сервера содержал неподдерживаемую кодировку в заголовкеContent-Encoding.
Инструмент трассировки
Чтобы диагностировать ошибку с помощью инструмента трассировки:
- Включите сеанс трассировки и выполните одно из следующих действий:
- Дождитесь появления ошибки
415 Unsupported Media Typeили - Если вы можете воспроизвести проблему, выполните вызов API, чтобы воспроизвести ошибку
415 Unsupported Media Type.
- Дождитесь появления ошибки
Убедитесь, что параметр « Показать все FlowInfos» включен:

- Выберите один из неудачных запросов и проверьте трассировку.
- Перемещайтесь по различным этапам трассировки и найдите место, где произошел сбой.
Обычно вы обнаружите ошибку в потоке после этапа отправки запроса на целевой сервер, как показано ниже:

Обратите внимание на значение ошибки из трассировки.
В приведенном выше примере трассировки ошибка отображается как
Unsupported Encoding "utf-8". Поскольку ошибка возникает в Apigee после отправки запроса на внутренний сервер, это указывает на то, что внутренний сервер отправил заголовок ответаContent-Encodingсо значением"utf-8", которое не поддерживается в Apigee.- Перейдите к этапу AX (записанные аналитические данные) в трассировке и щелкните его.
Прокрутите вниз до раздела «Заголовки ошибок/ответов» на панели «Сведения о фазе» и определите значения 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-код неисправности protocol.http.UnsupportedEncodingX-Apigee-источник-ошибки target- Проверьте, используете ли вы цепочку прокси ; то есть, если целевой сервер/целевая конечная точка вызывает другой прокси-сервер в Apigee.
Чтобы определить это, вернитесь к этапу «Запрос отправлен на целевой сервер» . Нажмите «Показать завиток» .

- Откроется окно Curl for Request Sent to Target Server, в котором вы можете определить псевдоним хоста целевого сервера.
- Если псевдоним хоста целевого сервера указывает на псевдоним виртуального хоста, то это цепочка прокси. В этом случае вам необходимо повторить все вышеперечисленные шаги для связанного прокси-сервера, пока вы не определите, что на самом деле вызывает ошибку
415 Unsupported Media Type. - Если псевдоним хоста целевого сервера указывает на ваш внутренний сервер, это означает, что ваш внутренний сервер передает неподдерживаемую кодировку в Apigee.
Журналы доступа Nginix
Чтобы диагностировать ошибку с помощью журналов доступа NGINX:
- Если вы являетесь пользователем частного облака , вы можете использовать журналы доступа 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-код неисправности protocol.http.Response405WithoutAllowHeaderX-Apigee-источник-ошибки MPИсточник разлома X-Apigee также может иметь ценность
target.
Причина: неподдерживаемая кодировка в запросе.
Диагностика
- Определите код ошибки и источник ошибки , наблюдаемой с помощью мониторинга API или журналов доступа 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
Причина: неподдерживаемая кодировка в ответе.
Диагностика
- Определите код ошибки и источник ошибки , наблюдаемой с помощью мониторинга API, инструмента трассировки или журналов доступа 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 | Формат gzip Unix |
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 :
Если вы являетесь пользователем Public Cloud , предоставьте следующую информацию:
- Название организации
- Имя среды
- Имя API-прокси
- Полная команда
curlиспользуемая для воспроизведения ошибки415 - Файл трассировки запросов API
Если вы являетесь пользователем частного облака , предоставьте следующую информацию:
- Полное сообщение об ошибке, наблюдаемое для неудачных запросов
- Имя среды
- Пакет 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