<ph type="x-smartling-placeholder"></ph>
您正在查看 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
标头的值在
客户端发送给 Apigee 的 HTTP 请求或后端服务器发送给 的 HTTP 响应
Apigee 不包含
根据相关规范,由 Apigee 支持编码
RFC 7231,第 6.5.13 节:415 不支持的媒体类型。
导致此错误的可能原因如下:
原因 | 说明 | 适用的问题排查说明 |
---|---|---|
请求中使用的编码不受支持 | 请求标头 Content-Encoding 包含不受支持的编码
。 |
Edge 公有云和私有云用户 |
响应中使用的编码不受支持 | 后端服务器响应标头 Content-Encoding 包含的编码
不支持 Apigee Edge。 |
Edge 公有云和私有云用户 |
常见诊断步骤
您可以使用以下任一方法诊断错误:
API 监控
<ph type="x-smartling-placeholder">如需使用 API Monitoring 诊断错误,请执行以下操作:
- <ph type="x-smartling-placeholder"></ph> 登录您的 Apigee Edge 账号。
切换到您要调查该问题的组织:
- 导航至分析 >API 监控 >调查页面。
- 选择您观察到错误的具体时间范围。
- 确保将代理过滤器设置为全部。
- 根据时间绘制错误代码。
选择一个错误代码为
protocol.http.UnsupportedEncoding
的单元格,如下所示:错误代码
protocol.http.UnsupportedEncoding
的相关信息如下所示:点击查看日志 ,然后展开其中一个失败的请求并显示
415
错误,以查看更多信息:- 在日志窗口中,请注意以下详细信息:
<ph type="x-smartling-placeholder">
- </ph>
- Fault Source:此页面会显示错误由
apigee
返回 或target
。 - 错误代码:这应该与
protocol.http.UnsupportedEncoding
匹配。
- Fault Source:此页面会显示错误由
- 如果错误来源为
apigee
,则表示请求Content-Encoding
标头中包含不受支持的编码。 - 如果故障来源为
target
,则表示后端服务器 响应的Content-Encoding
标头中包含不受支持的编码。
跟踪工具
<ph type="x-smartling-placeholder">如需使用跟踪工具诊断错误,请执行以下操作:
- 启用
跟踪会话以及以下任一事件:
<ph type="x-smartling-placeholder">
- </ph>
- 等待发生
415 Unsupported Media Type
错误,或者 - 如果您可以重现问题,请进行 API 调用以重现问题
415 Unsupported Media Type
个错误。
- 等待发生
确保已启用 Show all FlowInfos:
- 选择其中一个失败请求并检查跟踪记录。
- 浏览跟踪记录的不同阶段,并找到失败的位置。
该错误通常在 Request sent to target 服务器阶段,如下所示:
请记下跟踪记录中的错误值。
上面的示例跟踪记录将错误显示为
Unsupported Encoding "utf-8"
。开始时间 错误是在请求发送到后端服务器后由 Apigee 引发的,它表示 后端服务器发送了响应标头Content-Encoding
和值 (共"utf-8"
),该日期不是 Apigee 中支持的编码。- 进入跟踪记录中的 AX(记录的 Google Analytics 数据)阶段,然后点击该阶段。
向下滚动到 Phase Details 中的 Error / Response Headers 部分 确定 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
- 检查您使用的是否为
<ph type="x-smartling-placeholder"></ph>
代理链;也就是说,如果目标服务器/目标端点正在调用另一个
创建代理
如需确定这一点,请返回到请求已发送到目标服务器阶段。 点击 Show Curl。
- 此时将打开 Curl for Request Sent to Target Server(请求发送到目标服务器)窗口,您可以从中执行以下操作: 确定目标服务器主机别名。
- 如果目标服务器主机别名指向虚拟主机别名,则该别名为代理。
链接。在这种情况下,您需要对链式代理重复上述所有步骤,
您可以确定导致
415 Unsupported Media Type
错误的实际原因。 - 如果目标服务器主机别名指向您的后端服务器,则表示 您的后端服务器将不受支持的编码传递给 Apigee。
Nginix 访问日志
<ph type="x-smartling-placeholder">如需使用 NGINX 访问日志诊断错误,请执行以下操作:
- 如果您是私有云用户,则可以使用 NGINX 访问日志来确定
有关 HTTP
415
错误的关键信息。 查看 NGINX 访问日志:
<ph type="x-smartling-placeholder">/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- 在特定时间段内搜索任何
415
错误(如果问题发生) 过去)或415
时是否仍失败的任何请求。 如果您确实在 X-Apigee-fault-code 匹配项中找到了任何
415
错误, 确定protocol.http.UnsupportedEncoding
的值,然后确定 X-Apigee-fault-source.NGINX 访问日志中的 415 错误示例:
以上 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 还可以具有X-Apigee-fault-source 值X-Apigee-fault-source 。
原因:请求中包含不受支持的编码
诊断
- 确定使用 API 观察到的错误的错误代码和错误来源 监控或 NGINX 访问日志(如中所述) 常见的诊断步骤。
- 如果故障代码为
protocol.http.UnsupportedEncoding
且故障 Source 的值为apigee
或MP
,则表示 客户端应用发送的请求标头中包含不受支持的编码Content-Encoding
。 - 您可以确定作为 HTTP 请求的一部分传递的不受支持的编码的值
使用以下任一方法:
错误消息
使用错误消息: <ph type="x-smartling-placeholder">- </ph>
如果您有权查看从 Apigee Edge 收到的完整错误消息,请参阅 发送到
faultstring
。faultstring
包含不受支持的 结束编码。示例错误消息:
"faultstring":"Unsupported Encoding \"UTF-8\""
请注意,在上述错误消息中,不支持的编码的值是
“UTF-8”
,如faultstring
中所示。由于
“UTF-8”
在 Apigee Edge 中不是受支持的编码,因此此请求 失败,并显示415 Unsupported Media Type
错误,错误代码:protocol.http.UnsupportedEncoding
。
实际请求
使用实际请求: <ph type="x-smartling-placeholder">- </ph>
- 如果您无权访问客户端应用发出的实际请求,请前往 解决方法。
- 如果您可以访问客户端应用发出的实际请求,则请执行
操作步骤:
<ph type="x-smartling-placeholder">
- </ph>
- 确定传递给请求标头
Content-Encoding.
的值 - 如果传递给请求标头
Content-Encoding
的值不是 1 支持的编码中列出的值,则该值为 导致出现此错误的原因。示例请求:
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 支持的编码列表, 支持的编码。
- 确保客户端应用始终发送以下内容:
<ph type="x-smartling-placeholder">
- </ph>
- 仅支持作为
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
标头。 - 您可以从
使用以下方法之一访问后端服务器:
错误消息
使用错误消息: <ph type="x-smartling-placeholder">- </ph>
如果您有权查看从 Apigee Edge 收到的完整错误消息,则: 请参阅
faultstring
。faultstring
包含 编码不受支持。示例错误消息:
"faultstring":"Unsupported Encoding \"UTF-8\""
-
请注意,在上述错误消息中,不支持的编码的值是
“UTF-8”
,如faultstring
中所示。由于
“UTF-8”
在 Apigee Edge 中不是受支持的编码, 请求失败,出现415 Unsupported Media Type
错误,错误代码为:protocol.http.UnsupportedEncoding
。
跟踪工具
使用 Trace: <ph type="x-smartling-placeholder">
分辨率
- 请参阅 Apigee 支持的编码列表, 支持的编码
- 确保后端服务器始终发送以下内容:
<ph type="x-smartling-placeholder">
- </ph>
- 只有支持的编码作为
请求中的
Content-Encoding
标头 - 面向 Apigee Edge 且采用受支持格式的响应载荷并与格式匹配
在
Content-Encoding
标头中指定
- 只有支持的编码作为
请求中的
支持的编码
下表列出了 Apigee Edge 支持的编码格式:
标题 | 编码 | 说明 |
---|---|---|
Content-Encoding |
gzip |
Unix gzip 格式 |
deflate |
此格式使用 zlib 结构和 deflate 压缩算法。 |
规范
Apigee 根据415 Unsupported Media Type
以下 RFC 规范:
规范 |
---|
<ph type="x-smartling-placeholder"></ph> RFC 7231,第 6.5.13 节:415 不支持的媒体类型 |
需要注意的要点
请注意以下几点:
- 如果由于传入的编码不受支持导致 Apigee 返回
415
错误Content-Encoding
标头作为 API 请求的一部分,然后执行以下操作: <ph type="x-smartling-placeholder">- </ph>
- 您将无法捕获此类请求的跟踪记录。
-
您无法修改由 Apigee Edge,其中包含了 RaiseFault、AssignMessage 等政策。
这是因为此错误出现在消息处理器的早期阶段, 政策。
- 如果由于传递了不受支持的编码而导致 Apigee 返回
415
错误 则必须修复该问题 以避免此错误。请根据需要与您的后端团队合作, 解决此问题。
如果您仍需要 Apigee Edge 支持团队的任何帮助, 请参阅必须收集诊断信息。
必须收集的诊断信息
如果您仍需要 Apigee 支持团队的任何帮助,请收集以下信息 然后联系 Apigee Edge 支持团队:
如果您是公有云用户,请提供以下信息:
- 组织名称
- 环境名称
- API 代理名称
- 完成用于重现
415
错误的curl
命令 - 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