Это несколько умозрительный вопрос, поскольку ответ может быть неочевидным в имеющейся у меня информации, но я надеюсь, что кто-то с достаточным опытом распознает вероятный ответ, основанный на общепринятых практиках для корпоративных прокси.
Работаю (не разработчиком ПО) за корпоративным прокси. В свободное время я возился с Java-программой, которую разрабатывал. Эта программа должна сделать несколько очень простых запросов HTTP GET, и я использую для этого Apache HttpClient. Сначала я беспокоился о том, смогу ли я сделать это через прокси-сервер. В наших веб-браузерах прокси-сервер просто вводится в настройки сети... аутентификация не требуется. Итак, я добавил в свою Java-программу следующее:
myClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, MY_PROXY);
Конечно же, это сработало! Однако меня беспокоило другое. В HTTP-запросах, исходящих от моей программы, вероятно, был указан какой-то странный User-Agent (с тех пор я подтвердил, что это так), и я не хотел, чтобы они когда-либо вызывали какие-либо подозрения при автоматической или ручной проверке пакетов. Поэтому я сказал себе: «Почему бы просто не установить заголовок User-Agent таким же, как в браузере на этой машине?»
myClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, BROWSER_AGENT);
Вот где это становится странным. Если приведенная выше строка BROWSER_AGENT
имеет точное значение, равное корпоративному браузеру на моем компьютере (IE или FF), я получаю сообщение об ошибке типа "аутентификация не удалась, отсутствуют учетные данные", возвращаемое из корпоративный прокси-сервер. Но если я установлю для заголовка User-Agent что-то общее, например, Mozilla 5.0
, или даже полностью фиктивную строку, или даже пустую строку, все будет работать нормально! Части, которые меня смущают:
- Когда User-Agent настроен на то же, что и мой браузер (длинная сложная строка), я каким-то образом «проваливаю аутентификацию», что не имеет смысла, поскольку в реальном браузере я не предоставляю информацию для аутентификации (если только она не исходит из какого-то предварительно установленного сертификата может быть?)
- Если корпорация требует аутентификации для любых запросов, отправляемых на прокси-сервер через порт 80, то почему они пропускают случайные строки User-Agent? Надзор? Какая-то другая причина, которую я не могу понять?
Надеюсь, этот вопрос не слишком умозрительный, чтобы считать его конструктивным. Хотелось бы услышать мнение людей с опытом в этой области. Спасибо.