什么会导致 HTTP 发回“400 OK”

Dav*_*ein 5 air jquery http http-headers

当我将一些参数放入 URL 时,有时会收到错误,该错误应该是有效的请求,如“400 OK”。

相同的 URL 和参数在 99% 的情况下都可以工作,但我发现日志中突然出现错误。

这是由于某些因素而可能发生的晦涩的事情,还是我的应用程序特有的东西导致了奇怪的标题的混杂?如果前者没有答案,我猜是后者:)

更新

对于注释,“它”是编写的一个相对简单的 RESTful API。现在它几乎总是返回正确的标头,例如 400 和错误正文或 200 和正常正文。当错误标头到达 Web 客户端时,Web 客户端会使用收到的消息 ping 报告 URL,以便我们可以区分 Web 应用程序和移动应用程序之间的 API 错误。据我们所知,没有任何代码组合可以使这个“400 OK”地狱。但鉴于我们的代码混乱之外似乎不可能发生这种情况,因此我将进行更深入的研究。

更新2

好吧,我已经比以前更深入地研究了我们的框架,并与一些开发人员进行了交谈。

它通过 AJAX 调用 API 将信息返回给浏览器。

浏览器检测到“400 OK”并将其发送回我们的服务器,我们在服务器上收到了这个奇怪的报告。没有人亲眼目睹过这种情况的发生,但日志显示它正在发生。

我们的代码库中实际上有零个代码会返回 400 OK,因为我们的 HTTP 标头处理程序中唯一的 400 是“400 bad request”

我现在想知道我是否遇到了一些浏览器/jquery/ajax bug。

UPDATE 3(因为你不能获得太多信息)

我检查了浏览器如何发现问题。根据 jQuery $.ajax 的报告,失败时会触发回调。然后我们有这样的代码:

xhr.always(function() {
  var request = [ this.type, this.url, this.data ].join(' '),
      response = [ xhr.status, xhr.statusText, xhr.responseText ].join(' ');

  $.ajax({ 
    url   : REPORTING_URL,
    type  : 'POST', 
    data : { request : request, response : response }
  });
});
Run Code Online (Sandbox Code Playgroud)

我们知道这在“大多数”情况下有效,因为我们还收到了来自这些 ajax 调用的“400 错误”响应

更新4

我刚刚注意到所有错误实际上都来自用户代理:

Mozilla webkit etc...... AdobeAIR/1.5.3这是一个非常旧的版本

我们的 AIR 应用程序只有我们的 Web 应用程序的 iframe。我只能想象那里发生了什么。

Dav*_*ein 1

在 @pst 的精彩答案(我将其标记为官方答案)之后,我发现了一个更令人沮丧的答案,该答案对于我的情况 100% 正确。

该标头是通过 Adob​​e AIR 1.5.3 用户使用 iframe 中的网站来获取的。

在强制升级我们所有 AIR 用户后,它就消失了,因此可以安全地假设这是他们的标头报告的错误。