Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
15-1301925043
young_dev
2011-04-04 17:50
2011.07.17
SVN vs. GIT


2-1302452393
mefodiy
2011-04-10 20:19
2011.07.17
Проблема с закрытием формы


2-1301992024
NieL
2011-04-05 12:27
2011.07.17
xpath


2-1302557511
zulus
2011-04-12 01:31
2011.07.17
Интеграция кода ид С++ DLL В Delphi


2-1302005274
Германн
2011-04-05 16:07
2011.07.17
Как запретить изменение ширины колонок в ListView?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский