Ajax调用失败,但仅限于某个运营商

时间:2016-09-06 22:49:07

标签: javascript ajax

我的网站正在www.example.com上运行。加载页面时,将获取一个JavaScript文件,该文件对xyz.subdomain.example.com进行Ajax调用。

一切都适用于我测试的每个平台/浏览器,除了一个。当我在我的Android手机上运行时,事情就会失败(无论使用哪种浏览器,如果启用WiFi,情况都会有效)。然而,在我妻子的手机上连接到不同的运营商的事情是正常的(是的,我们有2家公司 - 长篇故事)。

当事情失败时,我收到的状态为0,没有其他文字。我的直觉是,这可能是一个CORS问题,但谁能接听电话?我认为浏览器确实如此,我相信操作系统,但我不能接受运营商这样做。

关于发生了什么还有其他解释吗?知道如何解决这个问题吗?

修改

我取得了一些进展,但还没有解决问题。感谢所有帮助过的人。

我原来的解释有点简化。我实际上是想去random.xyz.subdomain.example.com,然后看看DNS服务器(我控制的)会发生什么。

无论如何,我决定安装termux,这很棒。这是我发现的:

dig random.xyz.subdomain.example.com

正确解析。 FWIW,谷歌DNS正在这里使用。

curl random.xyz.subdomain.example.com

收到错误:curl:(6)无法解析主机random.xyz.subdomain.example.com

好的,那是出乎意料的。域解析为dig,但curl有问题。

此时我在手机上打开WiFi

curl random.xyz.subdomain.example.com

正确返回了一堆数据。

这看起来有点奇怪。我认为这意味着运营商不是问题,电话是。或者更具体地说,手机中的移动代码因为WiFi工作得很漂亮。这是正确的吗?我还应该测试什么?

如果有什么意义,这款手机是运行Android 5.1.1的三星Galaxy Grand Prime(SM-G530W)

编辑2

我对挖掘和卷曲之间的不同行为感到不安,并开始研究它。我确实看到有些人参考了这个问题但没有完全解决它。我还注意到,我在手机上找到的行为也可以从现有的AWS Linux实例中复制。

我还意识到解析控制random.xyz.subdomain.example.com区域的名称服务器名称的过程非常复杂。它包括通过3个不同公司控制的资源跟踪一些CNAME。整个过程有效,但显然不适用于某些情况。

无论如何,我使这个名称服务器名称的解决方案变得更加简单,现在随处可见。我认为最终的问题是Linux网络中的一些较旧的和错误的库,它没有正确解析或处理很少发生的某些情况。

2 个答案:

答案 0 :(得分:4)

在Android上有很多方法可以调试它,最简单的方法是将chrome的远程调试器连接到有问题的手机,并检查控制台和网络选项卡以获得进一步的解释。

如果没有用,请谷歌你的isp / cell提供商,手机型号,以防它是一个已知的“功能”。

您可以从服务器的角度检查您的远程IP,或者只是询问谷歌“我的IP是什么”,“我的用户代理是什么”。安全/隐私/其他好的或坏的愿意(有时是系统)应用程序可能会劫持http流量。

如果结果是网络问题,并且您熟悉控制台,那么获取像termux这样的应用程序可能会有很大帮助。 curl,ping,traceroute等标准工具可能有助于确定根本原因。

答案 1 :(得分:1)

xyz.subdomain.example.com上放置一个“测试”页面,然后使用相同的浏览器在手机上直接访问该页面。

如果您无法进入测试页面,请联系提供商(并且您有一个测试页面可以显示它们)。

如果您可以在浏览器中访问测试页但没有使用ajax调用,那么会发生一些非常奇怪的事情。

我能想到的唯一另一件事是手机本身有一些废话代码,因为ajax请求URL中的path而覆盖了请求。我以前见过这个,调试很棘手。要测试这个古怪的想法,请尝试重命名ajax请求的文件。

编辑:正如Phil所说。与您的妻子交换SIM卡进行交叉检查是否是运营商或电话问题可能是个好主意。