【问题标题】:Why is API HTTP response 406 despite not passing accept header?为什么 API HTTP 响应 406 尽管没有传递接受标头?
【发布时间】:2020-03-06 19:07:16
【问题描述】:

我的 API 正在使用 URL 调用其他服务

https://idgenvip.qa.ch3.s.com/IDGen/services/id/generate?idType=GIFT_REGISTRY_ID

此服务返回我 HTTP 响应代码 406 这是不可接受的。

UtilHelper:691 - 生成 id 时发生异常:服务器 返回的 HTTP 响应代码:406 用于 URL: https://idgenvip.qa.ch3.s.com/IDGen/services/id/generate?idType=GIFT_REGISTRY_ID

我没有在我的请求中传递接受标头。我得到这个的其他原因可能是什么?

【问题讨论】:

  • 联系服务器或附加 API 规范
  • @yeahseol API 给出一个整数。响应为 xml 格式。
  • “我没有在我的请求中传递接受标头。” - 结果是错误的。

标签: java amazon-web-services docker wildfly httpresponse


【解决方案1】:

就我而言,当我检查代码时,接受标头已硬编码在代码本身中。

HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("GET");
            connection.setRequestProperty("Accept", "application/xml");
            connection.setRequestProperty("Content-Type", "application/json");

因此,当我删除/注释掉代码时,服务停止抛出 406。:-)

【讨论】:

    【解决方案2】:

    坦率地说,406 响应可能会因任何原因而返回......或者根本没有原因。

    根据 HTTP 1.1 规范(第 6.5.6 节),应该返回的是这些标头之一以服务器无法提供的表示形式请求输出:

    • 接受
    • 接受字符集
    • 接受编码
    • 接受语言

    如果服务器实现遵循规范,则响应正文应列出它可以提供的表示。 (查看响应正文,看看它是否在说什么。)

    还能是什么?

    • 可能是服务器告诉您需要提供“接受”标头。

    • 可能是服务器故意给出误导性响应,因为它认为您在滥用 API。

    但我真的在猜测。正如我一开始所说的......它可以是任何东西。

    我的建议是仔细阅读 API 文档,并询问运行服务器的人员您在做什么。

    【讨论】:

      猜你喜欢
      • 2019-09-01
      • 2012-12-24
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      相关资源
      最近更新 更多