"application/x-amz-json"是什么,它与"application/json"有何不同?

14
我在访问 AWS 资源时遇到了 "application/x-amz-json-1.1",最近与我通信的 API 网关无法处理它(出于某种原因),这让我想知道为什么要使用 "application/x-amz-json-1.1" 而不是 "application/json" 来进行请求。但令我失望的是,AWS 似乎没有任何关于这种奇怪内容类型的文档。
所以我转向 SO:什么是 "application/x-amz-json",它与 "application/json" 有何不同?

我有同样的问题。 - A-nak Wannapaschaiyong
3
从这个链接 https://docs.aws.amazon.com/translate/latest/dg/API_Reference.html 上看,'application/x-amz-json-1.1' 表示请求内容是 JSON 格式,并指定了JSON的版本。这就是它们之间的区别。 - A-nak Wannapaschaiyong
1个回答

6

亚马逊并没有明确说明application/x-amz-json的Content-Type用途,但是在AWS发布的开源服务和SDK定义语言Smithy上有协议文档:

考虑到这个问题涉及到使用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-Typeapplication/x-amz-json-1.1或其他版本。根据相关文档:

内容类型(条件性)

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

条件:必须在PATCH、PUT和POST请求中使用。

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


使用Content-Type头告诉服务器/客户端如何处理我们的请求。 1

1
有趣的是,我的项目调用了2个AWS API网关,其中一个接受application/x-amz-json-1.0(我没有尝试其他格式),而另一个则需要application/json,并且在使用x-amz...时失败。 - Dima Tisnek
1
“required for POST” 这一位很容易被误读…… 我原本以为Pierre的意思是在使用API GW时,发出POST请求需要 x-amz... ,但实际上(?)只有当请求中有body(PATCH/PUT/POST)时,才需要 Content-Type 请求头字段,而字段的值并没有规定。 - Dima Tisnek
1
你说得没错,我重新表述一下以澄清这个问题。 - Pierre B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接