为什么我们的服务器收到我们的android应用程序的CONNECT方法请求,而我们不使用它在我们的代码?

一些用户抱怨networking问题。 我们的android应用通过https与我们的服务器通信。

我们的Apache日志显示了状态的回应; “405方法不允许(CONNECT)”,这个问题只是在特定的IP地址上重现。

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

似乎代理可能涉及到这个问题,但我不知道如何解决这个问题。 有人知道吗 ?

Solutions Collecting From Web of "为什么我们的服务器收到我们的android应用程序的CONNECT方法请求,而我们不使用它在我们的代码?"

查看http连接的维基

在HTTP代理服务器之后的HTTP隧道的变体是使用“连接”HTTP方法。[1] [2]

不要指出显而易见的,但启用连接方法在Apache接缝像答案。 比要求客户删除他们的代理服务器更容易。

您需要提供对CONNECT HTTP方法的支持,该方法通常用于通过代理服务器传输SSL请求。 这就是为什么你收到他们,一些用户是在一个代理。

在Apache中,要启用处理CONNECT请求, mod_proxy和mod_proxy_connect必须在服务器中。

问题是你需要保护你的服务器 ,这可能会打败你的应用程序的目的。

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

我无法提供一个交钥匙解决scheme,因为这里的一半战斗是在你的受支持的Android应用程序的源代码树中,以及与雇主的基础架构策略有关的variables的组合。 您有三个重要的问题需要回答,并且应该从Apachepipe理员的angular度出发,针对每个问题从概念上做到这一点:

  1. 什么时候“问题”客户最后能够连接没有问题?
  2. 在这之间和现在什么改变了,什么时候改变了?
  3. CONNECT消息是否与客户报告错误1:1相关?

问题1和2是优先考虑的,但不应该在这样的公共论坛上深入讨论。 对您的公共或私人configuration,应用程序等所做的更改通常被视为您的雇主的知识产权。 如果你在这里或任何地方讨论,请小心。 如果您发现所做的更改,即使是“无害的”更改,也可以发现它们与客户问题的相关性,并在适用的情况下执行回归testing。

问题三是我将要讨论的。 根据我上面阅读的信息,没有确认CONNECT与每个客户问题有关。 似乎有些客户报告了问题,并且您查看了日志中的问题症状。 CONNECT错误看起来像一个问题,根据您分享的一些Android应用程序规范,这可能是问题所在。 但是,他们也可能是由某人扫描服务器上的易受攻击的模块而产生的“日志噪音”。

如果您尚未certificateCONNECT与客户错误的关联性,请尝试使用<If>指令并logging有关发出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服务器要求列表应用程序本身。

更好的是,一个构造良好的模块可以使您捕获特定客户端的debugging数据,而不会中断那些应用程序工作的人。 一如既往,我build议先在实验室build设和testing; 不要将全新的创意部署到生产环境中,而且绝对不会启用模块,因为互联网告诉你,即使他们正确地命名模块。

这里是指向<If>指令的Apache文档的链接:

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

祝你好运!