【问题标题】:Sending custom HTTP error information to Flash, JavaScript, etc向 Flash、JavaScript 等发送自定义 HTTP 错误信息
【发布时间】:2010-11-09 11:28:00
【问题描述】:

我目前正在开发一个 REST API,其核心功能之一是使用各种 HTTP 状态代码来返回状态/错误信息,其中一些可能是扩展信息(例如,如果未找到项目,其他一些类似的项目)将在响应正文中。

除非 HTTP 状态代码为 200 OK(即使是 201 Created 成功代码也可能导致 Flash 认为它是一个错误)。

所以我的问题是,有没有一种标准的方式允许这种类型的客户端请求所有状态码都是 HTTP 200,并以另一种方式指示 真实 状态码?

我想到的一个解决方案是,在 HTTP Accept-* 系列标头的模式中,使用 X-Accept-Status 扩展标头来指定可以处理哪些状态代码,例如Flash 会发送...

X-Accept-Status: 200

...然后任何不在此列表中的状态码将被映射到一个状态码,并在响应正文中返回错误,可能带有另一个扩展头指示真实状态码,例如

X-HTTP-Status-Code: 404 Not Found

这一切看起来有点可怕,并且违反了协议,但如果您有无法使用协议属性的客户端,那么这是不可避免的。我只是在寻找有点像X-HTTP-Method-Override 的东西(对于无法发送PUT/DELETE 请求的客户端,这是一种解决协议的“标准”方式),但对于无法理解状态代码的客户端。

【问题讨论】:

    标签: asp.net-mvc flash http rest error-handling


    【解决方案1】:

    好吧,实际上HTTPREST 的问题是,REST 是一个非常好的主意,HTTP 描述了它的一个非常好的实现......但实际上,只有许多客户端和服务器实现部分HTTP ...

    我不认为HTTP 是必须的.​​..不过,REST 是个好主意,REST 系统的完整性是一个强大的属性...所以为什么不使用HTTP 作为RESTful 系统的愚蠢传输层?

    这就是您正在做的事情,尽管在我看来,您对HTTP 以及所有理论上的内置功能都持有太多...您真的需要在状态码中传输信息吗?

    不要太依赖您的传输协议/层...有一个清晰的想法,您的服务应该如何工作...将协议语义与其实现分离...在客户端和服务器上... . 抽象你的RESTfulness 和状态代码(让它们不仅仅是整数......让它成为枚举,或对象......异常,为什么不呢?)......

    然后随意插入协议/传输层……

    • 制定标准的HTTP 实现
    • 使用您描述的解决方案制作一个 hacky 解决方案(在我看来这似乎完全有效......如果人们使用的技术无法使用标准,您为什么要费心寻找最符合标准的解决方案)李>
    • 做任何你有时间做的事情,你的服务器可以做任何事情,二进制,JSONXML ...任何看起来足够的事情...

    不过有两个技术说明:

    1. flash 播放器是否是浏览器上的HTTP 流量...它根本没有从浏览器获取状态代码...嗯,实际上它取决于浏览器...规格说,它没有适用于:“用于 Macintosh 的 Netscape、Mozilla、Safari、Opera 和 Internet Explorer。” ...所以 Windows 的 IE 应该可以工作?铬合金?我不知道......但我认为,这并不重要,因为显然,你不能依赖它......哦,最明显的是:JavaScript 也在浏览器上执行其HTTP,当然...这里也有同样的问题...
    2. 这意味着,如果您能够成功找到协议中内置的类似 X-HTTP-Method-Override 的响应,一个好的浏览器会理解这一点,并会相应地重新映射,之前 决定将哪些信息提供给 JavaScript 或 3rd-party 插件......所以你最终会一无所获......我猜......

    您应该简单地根据客户端选择您的响应方法......如果客户端无法使用HTTP标准,则可能应该发送一些额外的信息......否则抛出它,遵循标准...我首先使用标准HTTP 进行实现,但将HTTP 本身隐藏起来,一旦一切正常,使用

    问候

    back2dos

    【讨论】:

      【解决方案2】:

      我认为不应该让一个残缺的开箱即用 API 潜在客户来决定 API 实现的特性,我错了吗?我想实际考虑会赢得胜利,但总的来说,我想我的投票赞成“正确”构建 API 实现并根据需要要求自定义客户端编程。

      【讨论】:

      • 问题是客户端根本无法使用“正确”构建的应用程序。想象一下与你的经理的对话......你:“不,我们不能让 [在此处插入大公司] 使用 API,即使他们会付给我们 [在此处插入大量资金],因为他们无法调用它完美的方式。”。老板:“改变它,以便他们可以调用它。现在。”
      • -1。潜在的客户端(Adobe Flash)本身并没有瘫痪,而是受到旧版浏览器插件 NSAPI 的瘫痪/限制。我们谈论的是在许多常见浏览器中存在此问题的任何插件技术。注重实用性而不是纯粹性。
      【解决方案3】:

      回复有点晚了,但是...

      当我使用早期版本的 OpenRasta 实现 Flash 客户端 API 时,我在每个传出请求上都有包含响应代码和文本的 X-ResponseLine。

      由于标头默认情况下只是通用标头,它们不参与缓存,因此没有理由对此进行 Accept / Vary。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-19
        • 1970-01-01
        • 2015-04-17
        • 2012-12-30
        • 2018-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多