我的私有 Discourse 服务器可以正常工作,并且可以通过浏览器和 iOS 移动应用程序访问。
然而,在安卓上,Discourse Hub 找不到该服务器。(它可以找到 meta.discourse.org 等其他服务器。)
有人知道为什么会失败吗?会不会是安卓移动应用程序访问服务器时使用的爬虫代理(crawler agent)与 iOS 版本不同?还是有其他原因?
我的私有 Discourse 服务器可以正常工作,并且可以通过浏览器和 iOS 移动应用程序访问。
然而,在安卓上,Discourse Hub 找不到该服务器。(它可以找到 meta.discourse.org 等其他服务器。)
有人知道为什么会失败吗?会不会是安卓移动应用程序访问服务器时使用的爬虫代理(crawler agent)与 iOS 版本不同?还是有其他原因?
是的,移动应用程序会发出一些特定的请求来确定该 URL 是否为 Discourse 服务器。
有两个请求:
HEAD 请求到 serverdomain.com/user-api-key/newGET 请求到 serverdomain.com/site/basic-info.json如果其中任何一个没有返回数据,应用程序将假定该 URL 不是 Discourse 站点。
最有帮助了,@pmusaraj!谢谢。跟进一下:
1- GET 请求收到了响应,但 HEAD 语句抛出了“值无效”错误。(meta.discourse.org 也是如此,但两个移动应用都可以连接到此实例。)我该如何修改服务器以对 HEAD 请求产生正确的响应?
2- 为什么 iOS 版本能够成功通过这些测试并连接到我的服务器?
啊,这表明 Discourse 端很可能是正常的,站点验证在 iOS 和 Android 上是相同的。
我记得有些 Android 版本/设备对 SSL 证书更严格,过去有过类似的情况,但那是很久以前了:Community not found in App Android Version 7 - #37 by h.vdheurik
就我所知,我的一位朋友使用原版安卓系统测试了这一点,结果相同。我的设备是运行最新版 GrapheneOS 的 Pixel 8a。
这是否是类似于您在 2017 年提到的新的密码(cypher)不兼容问题?
我不知道。如果你想私下把网站网址发给我,我可以进一步调试一下。
我们检查了爬虫。我的服务器阻止了许多爬虫,其中一个似乎阻止了移动应用程序连接。恢复出厂设置后,该应用程序能够连接。
然后我将 okhttp 添加为唯一允许的爬虫,移动应用程序仍然能够连接。危机解除。![]()
感谢 @pmusaraj 检查了安卓应用程序代码并解决了这个问题。