为什么我们的服务器在我们的代码中没有使用它时从我们的Android应用程序接收CONNECT方法请求?

时间:2015-03-30 14:34:34

标签: android http https http-status-code-405

有些用户抱怨网络问题。 我们的Android应用程序通过https与我们的服务器通信。

我们的Apache日志显示了状态响应; " 405方法不允许(CONNECT)",此问题仅在特定IP地址上重现。

我不明白为什么Android应用程序试图通过CONNECT方法到达服务器,我从不在应用程序中使用此方法,我只使用GET,POST或PUT。

似乎代理可能涉及该问题,但我不知道如何解决它。有谁知道吗?

3 个答案:

答案 0 :(得分:9)

查看wiki以获取http连接

  

HTTP代理服务器后面的HTTP隧道的变体   使用“CONNECT”HTTP方法。[1] [2]

不要指出显而易见的,但在Apache接口中启用connect方法,如答案。比要求客户删除其代理服务器更容易。

答案 1 :(得分:8)

您需要为CONNECT HTTP方法提供支持,该方法通常用于通过代理服务器隧道传输SSL请求。这就是你接收它们的原因,一些用户是代理人。

在Apache中,要启用处理CONNECT请求,服务器中必须存在mod_proxymod_proxy_connect

问题是你需要secure your server,这可能会破坏你app的目的。

如果您没有保护服务器,请不要启用mod_proxy和mod_proxy_connect。

答案 2 :(得分:1)

我无法提供交钥匙解决方案,因为此处的一半战斗在您支持的Android应用程序的源代码树中,以及与您雇主的基础架构策略相关的变量组合。您有三个重要问题需要回答,并且应该在概念上针对作为Apache管理员提供给您的每个问题执行此操作:

  1. "问题"客户最后能够毫无问题地连接?
  2. 当时和现在之间有什么变化,什么时候变了?
  3. CONNECT消息是否与客户报告错误1:1相关?
  4. 问题一和二是优先考虑,但不应在这样的公共论坛上深入讨论。对您的公共或私人配置,应用程序等所做的更改通常被视为您雇主的知识产权。如果您在这里或任何地方讨论,请谨慎使用。 如果您发现进行了更改,即使是无害的"变更,发现它们与客户问题的相关性,并在适用的情况下实施回归测试。

    我将讨论第三个问题。根据我上面阅读的消息,未确认CONNECT与每个客户问题相关。似乎有些客户报告了问题,并且您查看了问题症状的日志。 CONNECT错误看起来像是一个问题,并且根据您分享的一些Android应用程序规范,它们可能就是问题所在。但是,他们也可能会记录噪音"由某人扫描您的服务器以查找易受攻击的模块。

    如果您尚未证明CONNECT与客户错误的相关性,请尝试使用<If>指令并记录有关发出CONNECT语句的客户端的其他数据。作为一般例子:

    <If "%{REQUEST_METHOD} == CONNECT">
        ... some extra log format fields to get ALL of the data ...
        ... maybe a special log file just for CONNECTers?
    </If>
    

    使用收集的数据来了解趋势。可能只有特定版本的Android与您的应用程序以这种方式运行。您可以分支<If>来更改这些用户收到内容的方式,或者您可以与Android应用的开发者合作(当前的,或您雇用的下一个;)根据应用程序本身开发Web服务器需求列表。

    更好的是,构造良好的块可以让您捕获特定客户端的调试数据,而不会中断那些应用程序工作的人。一如既往,我建议先在实验室进行建设和测试;从来没有将全新的想法部署到生产中,并且绝对不会启用模块,因为互联网告诉你,即使他们正确地命名模块。

    以下是Apache <If>指令的文档链接:

    http://httpd.apache.org/docs/2.4/mod/core.html#if
    http://httpd.apache.org/docs/2.4/expr.html

    祝你好运!