【问题标题】:What problems may using the MIME type application/json cause?使用 MIME 类型 application/json 可能会导致什么问题?
【发布时间】:2011-06-15 02:31:32
【问题描述】:

我正在开发需要返回 JSON 数据的 Web 服务。 I read that I should use application/json 但不确定这会导致什么问题?

例如,旧的浏览器会支持它吗? (IE6+、FF、Opera等)

或者公司防火墙/代理服务器后面的用户是否有可能阻止 mime 类型 application/json?

您在遵循此建议时遇到过什么问题(如果有的话)?

【问题讨论】:

    标签: javascript json cross-browser content-type mime-types


    【解决方案1】:

    我自己刚刚与 IE8 进行了长时间的斗争,我发现如果您将 json 作为 text/plain 加载到 iframe 中,IE8 会将其包装在标签中。如果您随后使用 innerHTML 获取内容并尝试将其解析为 json,它将失败。

    我最终不得不将内容作为 text/html 发送,这似乎完全错误,但在 IE 中有效,并且似乎不会弄乱其他浏览器更现代的 AJAX 处理。

    【讨论】:

      【解决方案2】:

      让我们考虑一下 IE。假设您有一个隐藏的 iFrame,用于请求文件下载。例如

      <iframe src="getFile?id=123">
      

      现在,服务器可能会发送 JSON 编码的错误消息,例如

      {
          error: 'File 123 does not exist',
          retryLater: false
      }
      

      如果该错误消息以application/json 发送,则会出现一个下载对话框,因为 JSON 文本被误认为是实际文件。

      另一方面,text/plain 的 MIME 类型将导致消息在 iFrame 中呈现,您可以将其提取出来,然后使用 JScript 将其转换为精美的弹出窗口或其他内容。


      (编辑)

      真实示例:EXTJS Fileupload - Problem with IE8 security bar

      【讨论】:

      • 感谢 pumbaa80,并且考虑到 Eric 在下面所说的,看起来使用 text/x-json 可能是最好的。
      • 我现在才意识到text/x-json 也会打开一个下载对话框,所以你需要text/plain 来获取 iframe 内容。此外,uploading 是一个比下载有用得多的示例。
      【解决方案3】:

      这已经讨论过了:

      What is the correct JSON content type?

      任何阻止 MIME 类型的防火墙都会导致任何 AJAX 风格的网络应用出现问题,所以我真的不用担心。

      【讨论】:

      • 感谢您的评论,是的,我阅读了您指出的讨论。我一直在寻找更多真实世界的具体示例,一些 SO 用户可能有经验。就像下面的 Pumbaa80 回答一样。很高兴了解防火墙。谢谢
      猜你喜欢
      • 2015-08-04
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多