【问题标题】:What is "application/x-amz-json" and how is it different from "application/json"?什么是“application/x-amz-json”,它与“application/json”有何不同?
【发布时间】:2021-10-25 22:10:19
【问题描述】:

我在向 AWS 资源发出请求时遇到了“application/x-amz-json-1.1”。最近,我正在与之通信的 API 网关不喜欢处理它(无论出于何种原因)成为一个问题。这让我想知道在我的请求中使用 application/x-amz-json-1.1 而不是 application/json 有什么好处。令我失望的是,AWS 似乎没有关于这种奇怪内容类型的任何文档。

所以我转向 SO:什么是“application/x-amz-json”,它与“application/json”有何不同?

【问题讨论】:

标签: json amazon-web-services aws-api-gateway


【解决方案1】:

Amazon 没有具体记录 application/x-amz-json Content-Type 的用途,但在 Smithy(AWS 发布的一种用于定义服务和 SDK 的开源语言)上有协议文档:

考虑到这个问题与用作Content-Type1 标头发出请求时的区别有关,我想我们可以看出区别是:

  • application/json 是请求/接收 JSON 数据,没有更具体的内容
  • application/x-amz-json-1.1(或其他版本)也用于请求/接收 JSON 数据期望上述文档中描述的其他行为。 (即告诉服务器/客户端这是 JSON 加上其他元素)

我认为application/x-amz-json 可以被认为是一种扩展或更具体的处理application/json 请求的方式。

问题是我与之通信的 API 网关不喜欢处理它(无论出于何种原因)

在向 AWS Amazon API Gateway 发出 PATCH、PUT 和 POST 请求的特定情况下,似乎需要指定 Content-Type 标头 application/x-amz-json-1.1 或其他版本。根据related docs

内容类型(条件)

指定 JSON 和版本,例如 Content-Type: application/x-amz-json-1.0。

条件:需要 PATCH、PUT 和 POST 请求。

也许服务器将 application/json 理解为基本 JSON,但需要 application/x-amz-json-1.1 来执行特定请求。


1Content-Tye 标头用于告诉服务器/客户端如何处理我们的请求

【讨论】:

  • 有趣的是,我的项目调用了 2 个 aws api gws,其中一个接受 application/x-amz-json-1.0(我没有尝试其他人),而另一个 需要 application/json 并失败与x-amz...?
  • "post 所需" 位很容易被误读......我虽然 Pierre 的意思是在向 API GW 发出 POST 请求时需要x-amz...;而实际上 (?) 只是 Content-Type 请求标头字段对于具有正文 (PATCH/PUT/POST) 的请求是必需的,而该字段的值不是强制性的。
  • 你没有看错,我重新表述以澄清这一点。
猜你喜欢
  • 2012-04-09
  • 2020-04-23
  • 2017-01-21
  • 2017-09-11
  • 1970-01-01
  • 2017-11-09
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多