Форум: "Сети";
Текущий архив: 2011.07.17;
Скачать: [xml.tar.bz2];
ВнизЗаголовок Proxy-Connection при использовании библиотеки WinINet Найти похожие ветки
← →
Тимохов © (2009-03-15 11:04) [0]Здравствуйте!
Вопрос исходно был задан на исходниках: http://forum.sources.ru/index.php?showtopic=267260 Если интересен ответ, то можно мониторить там.
------------
Ситуация
Я разрабатываю на Delphi приложение, которое должно обращаться на мой же сервер (на PHP).
Я сейчас тестирую свое приложение в части работы с прокси-серверами. У меня MS ISA Server.
На методику работы с прокси серверами оказывает влияние второй параметр функции InternetOpen.
Он может иметь следующие значения:
* INTERNET_OPEN_TYPE_DIRECT
* INTERNET_OPEN_TYPE_PROXY
* INTERNET_OPEN_TYPE_PRECONFIG
С первым и третьим значением я разобрался. Интересует тонкости работы со вторым значением.
Важной задачей является - создание транспорта максимально простого для конечного пользователя.
По возможности он вообще не должен касаться настройки. Поэтому умолчательным значением поведения прокси будет INTERNET_OPEN_TYPE_PRECONFIG.
Однако для НЕ пользующих Internet Explorer нужно разработать возможность работы посредством явного указания прокси прямо в моей программе.
Проблемы
Проблема заключается в том, что если я не добавляю в заголовок своего запроса (он POST, кстати) Proxy-Connection: Keep-Alive, то HttpSendRequest подвисает и отвисает только по таймауту, т.е. по ошибке 12002 = ERROR_INTERNET_TIMEOUT.
Что сам понял
Я использовал WireShark.
Когда у меня все работало (т.е. когда был заголовок Proxy-Connection: Keep-Alive), то общение с прокси выглядело так:
* Запрос клиента.
* Ответ прокси-сервера со статусом 407.
* Запрос клиента с затребованными данными (детали не знаю, но думаю, что это авторизация).
* Ответ прокси-сервера.
* Запрос клиента. Его прокси-сервер без проблем пропускает.
* Ответ сервера.
Если заголовок Proxy-Connection: Keep-Alive убрать, то все ограничивается только первыми двумя строками - т.е. прокси-сервер отвечает кодом 407. И все... Т.е. примерно так:
* Запрос HTTP POST http://www.tratratra.ru/query.php?param=1 HTTP/1.0 (application/x-www-form-urlencoded)
* Ответ HTTP HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied.) (text/html)
Вопросы
* Вопрос состоит в том - какова роль Proxy-Connection: Keep-Alive?
* Правильно ли описанное поведение? Почему WinINet (судя по снифферу) прерывает общение?
PS. Я немного знаю WireShark, т.о. если кому интересно будет помочь, то я могу ответить на вопросы о результатах сниффинга.
← →
Тимохов © (2009-03-21 00:08) [1]Вот, многие сетуют на плохое качество вопросов.
Что вопрос плохой? Плохо оформлен? Сложный?
--------
Поправка к вопросу. Версия HTTP у меня все же 1.0. Умолчательное поведение заголовка Connection (но это же не Proxy-Connection!!!) для 1.0 прописано как close.
Однако это не меняет вопроса (перефразирую, впрочем, его) - кто виноват, что подвисает соединение по WinINet с использованием проксей при отсутствии в запросе заголовка proxy-connection в http версии 1.0?
← →
Rouse_ © (2009-03-21 00:31) [2]Дим, ну я-же тебе 2 раза обьяснял логоку поведения в случае отсутствия Keep-Alive.
Я как-то не правильно обьясняю чтоль? :)
← →
Тимохов © (2009-03-21 00:43) [3]А ты еще раз объясни, пожалуйста. Использовав при этом не меньше 12 строк текста.
Только объясни, пожалуйста, на примере именно proxy-connection.
Особый упор, прошу сделать на спецификация указанного заголовка.
Это же всем полезно будет.
------
Буду благодарен за вариант, при котором ты, будучи гуру, научить разобраться самому. Спеки, мне не помогают. А вот научиться пользоваться каким-то фришным сниффером - это очень полезно. Например, Wireshark (ранее - Ethereal, именно его ты мне и советовал года 2-3 назад).
← →
Rouse_ © (2009-03-22 13:57) [4]Keep-Alive обеспечивает открытый сеанс связи в течении времени, которое выставленно на сервере в параметре Keep-Alive Time. Если соединение устанавливается без этого параметра, то сеанс выглядит как
открытие соединения, вопрос, ответ, закрытие соединения (хотя все зависит от конкретного сервера конечно-же).
Если данный флаг указан в заголовках пакета то у обоих сокетов (клиенствкого и серверного) автоматически выставляется этот режим через setsockopt(), уровень SOL_SOCKET, параметр SO_KEEPALIVE
← →
Slym © (2009-04-20 18:43) [5]HTTP/1.0 - нету киплайвов: конект - запрос - ответ - дисконект...
но при этом ответ HTTP/1.1...
из этого предположу что соласно HTTP/1.0 ждет дисконект, а сервер получил пожелание кипалива и не обращая внимания на версию отвечает HTTP/1.1 и держит конекшен нарушая HTTP/1.0
попробуй отправить в HTTP/1.1
← →
Slym © (2009-04-20 18:53) [6]возможно параметр IE: галка использовать 1.1 через прокси
← →
Slym © (2009-04-20 18:56) [7]перечитал ветку - Я ошибся идей нету :)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2011.07.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c