- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个运行在 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,这里使用的是 Google 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
我对 dig 和 curl 之间的不同行为感到困扰,并开始研究它。我确实看到有人提到这个问题但没有完全解决它。我还注意到,我在手机上发现的行为也可以从库存 AWS Linux 实例中复制。
我还意识到,解析控制 random.xyz.subdomain.example.com 区域的名称服务器名称的过程非常复杂。它包括通过 3 家不同公司控制的资源跟踪一些 CNAME。整个过程有效,但在某些情况下显然无效。
无论如何,我简化了这个名称服务器名称的解析,现在到处都可以正常工作了。我认为最终的问题是 Linux 网络深处的一些旧的和错误的库没有正确解析或处理一些很少发生的情况。
最佳答案
在 android 上有很多方法可以调试这个问题,最简单的可能是将 chrome 的远程调试器连接到有问题的手机,然后检查控制台和网络选项卡以获得进一步的解释。
如果没有帮助,请用谷歌搜索您的 isp/手机提供商、手机型号,以防它是一个已知的“功能”。
您可以从服务器的 Angular 查看您的远程 ip,或者只问 google“我的 ip 是什么”,“我的用户代理是什么”。安全/隐私/其他好意或恶意(有时是系统)应用程序可能会劫持 http 流量。
如果最终证明是网络问题,并且您熟悉控制台,那么获取像 termux 这样的应用程序可能会有很大帮助。 curl、ping、traceroute 等标准工具可能有助于确定根本原因。
关于javascript - Ajax 调用失败,但仅在特定的手机运营商上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39358894/
这个问题已经存在: 关闭 13 年前。 Possible Duplicate: What is the !! (not not) operator in JavaScript? 我见过运算符 ! 像
我最近正在读《行动中的格鲁夫》。在第7章中,它介绍了*。运算符(operator) 。当我运行有关此运算符的代码时,我会遇到一些错误。 class Invoice {
我在沙箱 Groovy 上工作,我想阻止 .@ 运算符。我正在使用 SecureASTCustomizer 并编写了一个自定义的 SecureASTCustomizer.ExpressionCheck
我有一个函数接受一个包含大量数据的数组,例如,其中一个数据是“name”:$data = ['name' => 'John'] ; 现在,如果我想使用默认值从中获取名称,我有两个经常使用的选项。 $n
我只是想知道这是否是 C89 程序的“好”代码。 obj_ptr = (obj*) (ptr1 || ptr2); 本质上,如果 ptr1 != NULL 和 ptr2,它的作用(至少在我的计算机上的
我定义了一个类 User,并覆盖了它的 == 运算符,如下所示: class User attr_reader :age def initialize age @age = age
这个问题在这里已经有了答案: Why does "++x || ++y && ++z" calculate "++x" first, even though operator "&&" has hi
pipe(|) 和output(>) 重定向运算符有什么区别?我可以在哪里使用它们? 例如: 我通常只在 grep 中使用管道 (|) find . | grep abc 我遇到的输入输出重定向的唯一
我正在为此代码使用 g++ 10.2。有谁知道为什么我在最后一次 std::views::reverse 中收到编译器错误?在 results3 ? #include #include int m
假设我们正在使用 MASM 6.1/16 位/大数据模型编写汇编代码,并且我们有一个名为 MY_VAR 的变量(标签)、一个名为 MY_SEG 的段和一个名为 MY_GROUP 的段组。假设 MY_V
我试图在基类中使用宇宙飞船运算符,所以我将通过编译器定义所有运算符。 (来源:https://devblogs.microsoft.com/cppblog/simplify-your-code-wit
我在某处看到这段代码片段: var idx = SOME_VALUE; var color = { yellor: 1, red: 2, black: 0 }; var x = color
我观察到在某个时候有一个 ?海湾合作委员会的运营商。我如何在 GCC 4.5 下使用它们?它们是否已被移除,如果是,何时移除? Offset block_count = (cpfs->geo.bloc
我不是每天都阅读 C#,而是正在阅读最近的提交,其中包含一些让我感到困惑的内容: if (( length > maxLength) && ! IsTable(furniture.FurnitureT
拥有 public void Main() { int i = 0; Console.WriteLine($"I was {i++}, now I is {i}"); bool b = t
我观察到在某个时候有一个 ?海湾合作委员会的运营商。我如何在 GCC 4.5 下使用它们?它们是否已被移除,如果是,何时移除? Offset block_count = (cpfs->geo.bloc
今天,我听说了 Karatsuba 算法,一种快速乘法算法。我很好奇这个“快”是什么意思? 通常,我们在计算一段代码的时间复杂度时,会考虑使用 * 运算符作为 O(1) 的乘法运算,如果它始终为真,那
我观察到在某个时候有一个 ?海湾合作委员会的运营商。我如何在 GCC 4.5 下使用它们?它们是否已被移除,如果是,何时移除? Offset block_count = (cpfs->geo.bloc
我正在学习 Angular 和 RxJS 运算符。我正在使用 Hearthstone API 来训练它。我究竟做错了什么 ?我想过滤流以仅返回“萨满”卡。我知道,Api 让我有机会按类(class)获
正如标题所说,我正在尝试通过 += 运算符将文本附加到隐式解包的可选字符串,这给了我 'String!' is not identical to 'UInt8' 让你明白我的意思: var myStr
我是一名优秀的程序员,十分优秀!