一些用户抱怨网络问题。我们的Android应用程序通过https与服务器通信。
我们的Apache日志显示了状态为“405方法不允许(CONNECT)”的响应,这个问题只在特定的IP地址上重现。
我不明白为什么Android应用程序尝试使用CONNECT方法与服务器建立连接,因为我从来没有在应用程序中使用过该方法,我只使用GET、POST或PUT方法。
看起来代理可能涉及到了这个问题,但是我不知道如何解决它。有人知道吗?
一些用户抱怨网络问题。我们的Android应用程序通过https与服务器通信。
我们的Apache日志显示了状态为“405方法不允许(CONNECT)”的响应,这个问题只在特定的IP地址上重现。
我不明白为什么Android应用程序尝试使用CONNECT方法与服务器建立连接,因为我从来没有在应用程序中使用过该方法,我只使用GET、POST或PUT方法。
看起来代理可能涉及到了这个问题,但是我不知道如何解决它。有人知道吗?
查看http connect的维基百科
在HTTP代理服务器后面时,HTTP隧道的一种变化是使用“CONNECT” HTTP方法。[1][2]
不想说废话,但在Apache中启用connect方法似乎是答案。比要求客户删除其代理服务器更容易。
您需要为 CONNECT HTTP 方法提供支持,该方法通常用于通过代理服务器隧道传输 SSL 请求。这就是为什么您会收到它们,因为一些用户在代理后面。
在 Apache 中,要启用处理 CONNECT 请求,必须在服务器中存在 mod_proxy 和 mod_proxy_connect。
问题是您需要保护您的服务器,这可能会使您的应用程序失去意义。
如果您没有保护服务器,请勿启用 mod_proxy 和 mod_proxy_connect。
CONNECT
方法需要启用https代理服务器,而不是最终目标服务器(网站服务器)。1) client ----connect---->proxy-----tcp connection--->server
,2) client <--------->proxy<-------->server
请参考此来源,了解https代理服务器的工作原理。 - Accountant م<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>
<If>
以更改那些用户接收内容的方式,或者您可以与您的Android应用程序开发人员合作(当前的应用程序或下一个您雇用的应用程序)基于应用程序本身开发Web服务器要求列表。<If>
指令的文档链接:
http://httpd.apache.org/docs/2.4/mod/core.html#if
http://httpd.apache.org/docs/2.4/expr.html
祝你好运!