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