【问题标题】:Status 500 Internal Server Error in IE-11 with Angular Js Application带有 Angular Js 应用程序的 IE-11 中的状态 500 内部服务器错误
【发布时间】:2018-04-30 09:11:52
【问题描述】:

我正在使用 Angular Js、MongoDb 实现单页应用程序 (SPA)。我正在使用带有承诺的休息电话。在用于开发的 Mozila 浏览器 Chrome 中休息调用工作正常。但是休息电话在 IE-11 中不起作用。它给了我 500 内部服务器错误

我无法找到休息电话线。因为它没有显示行号。但我可以分享休息调用的示例代码。

  Rh.all('apicall').get('dbname/_aggrs/'+ ar_dep +'?avars=' + query).then(function (d) {

       console.log("response data");

      });

上面的调用不是打印控制台。因为它在 IE-11 中被破坏,但这些其余的调用在其他浏览器中工作正常。 如果我把直接路径不带变量,那么它在 IE-11 中工作。
下面的工作休息电话

Rh.all('apicall').get('dbname').then(function (d) {

           console.log("response data");

          });

控制台中的网络 (IE-11)

铬版

我正在更新我的问题。因为我发现解析url有些不同,因为restheart。

铬:

Rh.all('apicall').get('dbname/_aggrs/'+ ar_dep +'?avars=' + query)

解析后

localhost:8080/apicall/dbname/_aggrs/rout?avars={%22routes%22:%22US%22}

在查询对象中我有路线:我们。所以在 chrome 中它会解析 %22--%22 的“”。

在 IE-11 中

Rh.all('apicall').get('dbname/_aggrs/'+ ar_dep +'?avars=' + query)

解析后

localhost:8080/apicall/dbname/_aggrs/rout?avars={"routes":"US"}

在 IE-11 中,它不会将双引号解析为 %22 %22。它与字符串解析相同。

【问题讨论】:

  • 检查服务器端错误日志。
  • @charlietfl 我看不到服务器端错误日志。因为我只调用 API。我没有与服务器端代码交互。
  • 检查网络选项卡中的实际请求,然后与另一个浏览器中的相同请求进行比较。从标头到发送的数据的所有内容
  • 在 chrome 中它工作正常。给我 200 ok 状态
  • 这只是状态...请求中的其他内容必须不同

标签: angularjs mongodb internet-explorer cross-browser restheart


【解决方案1】:

500 错误始终与服务器有关。这些症状可能只出现在特定的浏览器上,但发生故障的是服务器;发送到服务器的请求导致服务器端代码以某种方式失败。

错误 500 本身就太笼统了;如果不了解有关错误的更多详细信息,则始终很难诊断,坦率地说,我无法在这里给您明确的答案。

最后,您应该排除明显的可能性,并检查您在 IE 中的浏览器设置。具体来说,任何可能导致它无法与服务器正确通信的设置。例如,确保 cookie 已启用并且工作正常。

但您应该做的第一件事是与 API 的供应商或开发人员讨论,因为他们将有权访问服务器错误日志,并且如果他们的代码抛出 500 错误,他们会想知道这一点。

但是,如果您确实想在最后进行调查,那么它特定于一个浏览器这一事实就是一个线索。如果其他浏览器都在工作,那么这告诉我们的是这个浏览器(IE11)正在发送请求,其中包含与其他浏览器不同的内容,并且触发服务器端代码失败。这为我们在调查中提供了一些帮助。

所以首先要做的是检查所有浏览器中的请求。在 Chrome、Firefox 和 IE 中使用 F12 开发工具,然后在这三个工具中都进行了相同的调用,它在 FF 和 Chrome 中有效,但在 IE11 中无效。

在开发工具中,您现在应该能够检查所有三个的请求详细信息。比较它们。

首先查看请求数据——即发送的实际查询字符串。如果存在差异,请考虑这些差异中的任何一个是否可能导致错误。有些东西可能很明显;例如,如果 IE 截断了变量或类似的东西。如果这能解决问题,那就太好了。

如果没有帮助,那么您需要更详细地查看。也许有一些差异,但它们看起来不应该破坏任何东西?现代浏览器开发工具允许您编辑和重新发送请求,因此请尝试在 Chrome 或 Firefox 的开发工具中编辑请求,并使参数与 IE 中失败的参数相同。现在尝试重新发送该请求。如果幸运的话,这将导致请求在其他浏览器中失败,这将允许您显示特定的数据集是问题(而不是特定的浏览器)。您提到它是第三方 API,因此您需要与 API 供应商讨论以找出该查询破坏其 API 的原因。

如果此时您仍未发现问题,并且您在两个浏览器中发送相同的查询,并且您以相同的用户身份登录,那么下一步就是查看请求标头。

有一个请求标头肯定会有所不同:用户代理字符串。但也可能有其他人。再次尝试重新发送在 Chrome 中有效的请求,但使用 IE 中失败请求的标头(包括 UA 字符串)。现在请求是否在 Chrome 中失败?如果是这样,请缩小导致失败的不同标头。

同样,如果这允许您找到导致问题的一组特定请求数据和标头,那么您将需要与 API 供应商讨论。

如果所有这些都没有帮助,请尝试查看 cookie。您已经检查了 cookie 是否正常工作,所以现在这似乎是一个很长的尝试,但再次比较浏览器之间的 cookie,看看它们是否有任何明显的不同。

我希望以上内容足以帮助您诊断问题。

【讨论】:

  • 我密切关注解决方案。我比较了 urls(IE-11 和 Chrome) 两者解析不同。因为我用的是restheart。它正在解析 url,如 ..%22var%22:%22abc%22.. 但在 IE-11 中无法解析。在 IE-11 中解析如 "var":"abc"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 2021-06-14
  • 1970-01-01
  • 2015-03-24
相关资源
最近更新 更多