Почему наш сервер получает запросы метода CONNECT от нашего приложения для Android, в то время как мы не используем его в нашем коде?
Некоторые пользователи жаловались на проблемы с сетью. Наше приложение для Android связывается с нашим сервером через https.
Наши журналы Apache показали ответы со статусом; "Метод 405 не разрешен (СОЕДИНИТЬ)", эта проблема воспроизводилась только на определенных IP-адресах.
Я не понимаю, почему приложение Android пытается достичь сервера с помощью метода CONNECT, я никогда не использую этот метод в приложении, я использую только GET, POST или PUT.
Кажется, прокси может быть вовлечен в эту проблему, но я не знаю, как ее решить. Кто-нибудь знает?
3 ответа
Глядя на вики для http connect
Вариант туннелирования HTTP, когда за прокси-сервером HTTP используется HTTP-метод "CONNECT".[1][2]
Не для того, чтобы указать на очевидное, но включение метода соединения в швах Apache как ответ. Проще, чем просить клиентов удалить свои прокси-серверы.
Необходимо обеспечить поддержку метода CONNECT HTTP, который обычно используется для туннелирования запросов SSL через прокси-серверы. Вот почему вы получаете их, некоторые пользователи находятся за прокси.
В Apache для включения обработки запросов CONNECT на сервере должны присутствовать mod_proxy и mod_proxy_connect.
Проблема в том, что вам нужно обезопасить свой сервер, что, вероятно, противоречит цели вашего приложения.
НЕ включайте mod_proxy и mod_proxy_connect, если вы не защитили свой сервер.
Я не могу предоставить решение "под ключ", потому что полдела здесь в дереве исходных текстов для вашего поддерживаемого приложения Android, а также в сочетании переменных, относящихся к политикам инфраструктуры вашего работодателя. У вас есть три больших вопроса, на которые вы должны ответить, и концептуально это нужно сделать для каждой проблемы, представленной вам как администратору Apache:
- Когда "проблемные" клиенты в последний раз могли подключаться без проблем?
- Что изменилось между тогда и сейчас, и когда это изменилось?
- Связывают ли сообщения CONNECT 1:1 с сообщениями об ошибках клиентов?
Вопросы один и два являются приоритетными, но их не следует подробно обсуждать на таком публичном форуме, как этот. Изменения, внесенные в ваши общедоступные или частные конфигурации, приложения и т. Д., Часто считаются интеллектуальной собственностью вашего работодателя. Будьте осторожны, если вы обсуждаете это здесь или где-либо еще. Если вы обнаружите, что были внесены изменения, даже "безвредные", найдите их связь с проблемой клиента и проведите регрессионное тестирование, где это применимо.
Вопрос номер три - это то, что я буду обсуждать. На основании сообщений, которые я прочитал выше, не подтверждается, что 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 (текущего или следующего, которое вы нанимаете;)), чтобы разработать список требований к веб-серверу на основе самого приложения.
Более того, хорошо сконструированный блок может позволить вам захватывать данные отладки для определенных клиентов, не нарушая работу тех, чьи приложения работают. Как всегда, я рекомендую сначала собрать и протестировать в лаборатории; никогда не внедряйте новые идеи в производство и, безусловно, никогда не включайте модули, потому что Интернет сказал вам об этом, даже если они были правы в названии модуля.
Вот ссылки на документацию Apache для <If>
директива:
http://httpd.apache.org/docs/2.4/mod/core.html
http://httpd.apache.org/docs/2.4/expr.html
Удачи!