当我将一些参数放入 URL 时,有时我会收到一个错误,因为应该是“400 OK”的有效请求。
相同的 URL 和参数将在 99% 的情况下有效,但我看到我们的日志中出现错误。
这是由于某些因素而可能发生的晦涩难懂的事情,还是我的应用程序特有的事情导致了奇怪的标题混搭?如果前者没有答案,我猜是后者:)
更新
对于评论,“它”是一个相对简单的 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 我们的网络应用程序。我只能想象那里发生了什么。