【发布时间】:2012-08-01 21:22:21
【问题描述】:
当我将一些参数放入 URL 时,有时我会收到一个错误,该错误应该是“400 OK”的有效请求。
相同的 URL 和参数在 99% 的情况下都有效,但我发现我们的日志中出现了错误。
这是由于某些因素而可能发生的晦涩难懂的事情,还是我的应用程序特有的事情导致了奇怪的标题混搭?如果前者没有答案,我猜是后者:)
更新
对于 cmets,“it”是一个相对简单的 RESTful API 编写而成。现在它几乎总是返回正确的标题,如 400 和错误正文或 200 和 ok 正文。当错误的标头到达 Web 客户端时,Web 客户端会使用它收到的消息 ping 报告 URL,以便我们可以区分我们的 Web 应用程序和移动应用程序之间的 API 错误。据我们所知,没有任何代码组合可以使这个“400 OK”成为地狱。但鉴于在我们的代码混乱之外似乎不可能发生这种情况,我将进行更深入的研究。
更新 2
好的,我对我们的框架进行了比以往任何时候都更深入的研究,并与一些开发人员进行了交谈。
它通过API的AJAX调用将信息返回给浏览器。
浏览器检测到“400 OK”并将其发送回我们的服务器,在那里我们得到了这个奇怪的报告。没有人亲眼看到这种情况发生,但日志说它正在发生。
在我们的代码库中实际上有零代码会返回 400 OK,因为我们的 HTTP 标头处理程序中只有 400 个是“400 bad request”
我现在想知道是否有一些浏览器/jquery/ajax 错误是我偶然发现的。
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 }
});
});
而且我们知道这“大部分”时间都有效,因为我们还收到了来自这些 ajax 调用的“400 错误”响应
更新 4
我刚刚注意到实际上所有的错误都来自用户代理:
Mozilla webkit etc...... AdobeAIR/1.5.3这是一个非常旧的版本
我们的 AIR 应用程序只有一个网络应用程序的 iframe。我只能想象那里发生了什么。
【问题讨论】:
-
无法发回“400 OK”。这不是 HTTP 状态代码。它可以发回“400”(错误请求)。什么将其视为“OK”?也许显示 real 响应标头会很有见地..
-
当然可以发回“400 OK”。 “它”可以发送任何“它”喜欢的东西。他甚至没有说“它”是什么!也许他自己实现了“它”。
-
@pst 为什么会这样?如果你实现它,你可以发送任何你想要的标题。
-
基于 cmets 似乎这个应用程序的开发人员之一正在让“它”发回错误的东西,因为正如你们所说,我想,常规的旧 HTTP 永远不能发回东西像这样
-
我建议首先 Dave Stein 说出“它”是什么,然后我们可以进行下一步。
标签: jquery http air http-headers