代码之家  ›  专栏  ›  技术社区  ›  Greg Beech

向Flash、JavaScript等发送自定义HTTP错误信息

  •  1
  • Greg Beech  · 技术社区  · 17 年前

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

    这很好,直到你遇到像Flash和JavaScript这样的“瘫痪”客户端,它们无法访问响应正文或标头,除非HTTP状态码为200 OK(即使是201 Created成功代码也会导致Flash认为这是一个错误而失败)。

    状态代码以另一种方式?

    我想到的一个解决方案是,在HTTP模式中 Accept-* 使用 X-Accept-Status

    X-Accept-Status: 200
    

    X-HTTP-Status-Code: 404 Not Found
    

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

    3 回复  |  直到 17 年前
        1
  •  2
  •   back2dos    17 年前

    实际上,问题在于 HTTP REST 是,那 这确实是个好主意,而且 描述了它的一个非常好的实现。..但实际上,许多客户端和服务器只实现了 ...

    我不认为 超文本传输协议 这是必须的。..然而, 表征状态转移 系统的完整性是一种强大的属性。..那么为什么不使用 超文本传输协议 表征状态转移 ful系统?

    超文本传输协议 所有这些都是理论上的内置功能。..您真的需要以状态码的形式传输信息吗?

    不要太依赖于你的传输协议/层。..要清楚地知道你的服务应该如何运作。..将协议语义与其实现分离。..在客户端和服务器上。..抽象你的 表征状态转移

    • 制定标准 超文本传输协议 实施
    • 无论你有时间做什么,你的服务器都能做,二进制, JSON , XML

    但有两个技术说明:

    1. flash播放器是这样的 超文本传输协议 浏览器上的流量。..并且它根本无法从浏览器获取状态代码。..事实上,这取决于浏览器。..规范说,它不适用于:“Netscape、Mozilla、Safari、Opera和Macintosh版的Internet Explorer。”。..所以IE for windows应该可以工作吗?铬?我不知道。..但我认为,这并不重要,因为很明显,你不能依赖它。..哦,最明显的一点是:JavaScript也会 超文本传输协议
    2. 因为这意味着,如果你能成功地找到这样的东西 X-HTTP-Method-Override 之前 决定向JavaScript或第三方插件提供哪些信息。…所以你最终会一无所获。..我猜。..

    您应该简单地根据客户端选择响应方法。..如果客户端无法使用,可能应该发送一些额外的信息 超文本传输协议 标准。..否则,就按照标准来处理。..我会首先使用标准实现 超文本传输协议 然而,隐藏 超文本传输协议 一旦一切正常,就用

    尔兹

    back2dos

        2
  •  0
  •   codemonkey    16 年前

    我认为不应该让API的一个瘫痪的潜在客户决定API实现的功能,这是错的吗?我认为实际的考虑赢得了胜利,但总的来说,我认为我的投票赞成“正确地”构建API实现,并需要根据需要进行自定义客户端编程。

        3
  •  0
  •   SerialSeb    16 年前

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

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