【问题标题】:404 error on mobile device but works on pc browser在移动设备上出现 404 错误,但在 PC 浏览器上有效
【发布时间】:2011-12-28 21:34:13
【问题描述】:

这可能是一个愚蠢的问题......但我正在尝试使用 phonegap 和 dojo 制作我的第一个应用程序。我能够使用 ajax 并从服务器读取一些数据。这在 android 模拟器上运行良好。我还可以在我的桌面浏览器中输入 url 并查看值。我正在使用带有 json 对象的 spring。

当我在手机网络浏览器中输入相同的网址时,我收到 404 错误。有人能告诉我为什么吗?我对移动开发非常陌生,我觉得我错过了一些东西。

网址是公开的。

谢谢

更新 使用相同的 ajax 调用,我可以访问以下 url http://search.twitter.com/search.json?q=bacon,它从 twitter 返回一个 json 文件。所以我不认为这是我的客户代码。还有其他想法吗?

【问题讨论】:

  • 您能否将手机发出的整个 http 请求包含在内。
  • 这是一个测试服务器,所以我不会给出完整的 url,但它基本上是 'mydomain.com/mobile/mobile/calc.json'(不带引号)。这是一个非常基本的弹簧应用程序。它适用于我所有的桌面浏览器。只是在移动浏览器上不断收到 404 错误
  • 仔细检查网址。然后检查服务器日志。
  • 网址没问题。看起来它没有进入服务器。至少不会进入我的弹簧控制器。
  • 我不知道您使用的是哪个版本的 phonegap。但请确保您已将 mydomain.com 添加到您的白名单中。 phonegap 会自动阻止所有对外部域的请求,除非它在白名单中。我不记得在我的头顶上,但它在 phonegap.plist 和它在 external something 键下。

标签: android rest mobile cordova


【解决方案1】:

疯狂的猜测 1)您的服务器可能需要正确的标头

Accept: application/json

网络浏览器默认使用通配符(接受:/

2) 您的服务器可能会使用 ua-agent 标头过滤掉非 Web 浏览器

【讨论】:

  • 感谢您的回答。我在春天使用@ResponseBody,我在我的类路径上使用mvc:annotation-driven with jackson。我相信它应该使用此设置自动将标头设置为 application/json 。我咨询了我的服务器管理员,他没有过滤任何东西。他向我展示了我们也可以从服务器上的命令行点击 url。他看到我的 android 设备请求相同的 url,它发送 404 而不是 200?
  • 我的意思是客户端需要在其标题中包含这个 -> 接受:应用程序/json
    根据问题描述,这些都是疯狂的猜测
【解决方案2】:

我在当前的 PhoneGap 项目中出现了非常相似的症状。当我试图通过 jQuery 调用访问我的 nginx/PHP 后端时:

var jqxhr = $.post(SERVER_URL, {'some': 'parameters', 'another': 'parameter'}, null, "jsonp")
    .done(function (data) {
            // Success, do something...
    })
    .fail(function (data) {
            // Failed, do something...
    });

...使用 SSL 时连接失败,出现 404。如果SERVER_URL 指向http URL,则调用正常。服务器上没有任何重定向。根据服务器日志,后端已执行并返回正确的 JSON 格式输出。

该代码仅在 Android 6.x(之前未测试)上失败,但在 iOS 10.x(之前未测试)以及 Firefox 和 Chromium 上运行良好。

原因是我的 nginx 配置有以下选项:

add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

其他平台似乎不像 Android 那样尊重这些标头。

【讨论】:

  • 你在'parameter之后错过了'
【解决方案3】:

最近我遇到了类似的问题,当您尝试从 Android 模拟器连接到 http://localhost 时会发生这种情况。 看到这个包含很好解决方案的线程-> Accessing webserver running within Eclipse from outside the workstation

简单的解决方案: 当你想从 Android 模拟器访问 localhost 时,你应该使用 10.0.2.2

【讨论】:

    【解决方案4】:

    感谢大家的帮助。它最终是由 nginx 将移动请求重新路由到未托管应用程序的服务器而导致的。因此出现 404 错误。

    【讨论】:

    • 你能提供更多细节吗?似乎我也有类似的问题,但我没有 nginx 管理员所需的知识
    猜你喜欢
    • 2014-07-23
    • 2015-10-03
    • 2020-12-22
    • 2017-01-08
    • 2019-04-17
    • 2015-08-11
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多