Конференция "Сети" » Proxy-Server вопрос по RFC2068 [D6, Win95/98, Win2k, WinXP]
 
  • FireMan_Alexey (02.07.08 18:45) [0]
    Клиент моему серверу:

    GET http://yandex.ru/yandsearch?text=akiam HTTP/1.0
    Accept=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
    Accept-Language=ru
    Cookie=yandexuid=2596031214934954; yabs-frequency=/2///fGAH0m820m00
    User-Agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host=yandex.ru
    Proxy-Connection=Keep-Alive



    Яндекс отвечает:

    HTTP/1.1 302 Found
    Date=Wed, 02 Jul 2008 14:22:34 GMT
    Server=Apache/1.3.29 (Unix) mod_perl/1.29 mod_deflate/1.0.21 rus/PL30.19
    Location=http://yandex.ruhttp://yandex.ru/yandsearch?text=akiam&lr=187
    Connection=close
    Content-Type=text/html



    Собственно вопрос, почему апаче склеивает имя хоста с конкретным урлом запроса.
    У меня когда посылаю запрос на прямую нормально отрабатывает, а когда через прокси, то вот такая ерунда!
    Сам браузер воспринимает как переадресацию на yandex.ruhttp.
    Как этого избежать может кто-то сталкивался с данной проблемой.
    Логика прокси принял переслал я не меняю данные, а  "=" после ключевых слов, а не ":" сделано для удобства просмотра отношения к траспортной логике не имеет!

    Я посмотрел в РФЦ там сказано, что должен быть абсолютный урл запроса а тут какая-то склейка непонятная для меня и как ее обрабатывать? тем более, что в моем случае нормально не обрбатывает браузер.
  • Anatoly Podgoretsky © (03.07.08 08:35) [1]
    > FireMan_Alexey  (02.07.2008 18:45:00)  [0]

    Это ошибка, только где, в программе, в прокси, в Яндексе.
  • umbra © (03.07.08 13:42) [2]

    > Собственно вопрос, почему апаче склеивает имя хоста с конкретным
    > урлом запроса.
    > У меня когда посылаю запрос на прямую нормально отрабатывает,
    >  а когда через прокси, то вот такая ерунда!


    это не апач, а прокси кривой :) и он таки меняет данные :)
  • FireMan_Alexey (03.07.08 21:28) [3]
    >umbra ©

    Это результат выполнения RECV-a,
    только у меня в прокси для тестирования выведено окно, в которое он выводит по строчно заголовок.
    Сам заголовок определяет по #13#10#13#10 за ним данные которые игнорируются!
    Есть буфер в который собирается информация до отправки к серверу, на тот случай если заголовок будет приходить частями!
    Буфер - мой класс распределения памяти, который уже не первый год использую и в нем ошибок быть не может!
    Да мой прокси по сути испоьзует только HTTP протокол.

    Вот кусок кода принятия данных:

    Const
     MaxRead=8192;

    Function  TMyProxyClient.ReadData:Boolean; //в случае True необходимо закрытие сокета
    Type
     TBuffType=Array of char;
    Var
     CRead   :Integer;
     CanRead :Cardinal;
     tBuff   :TBuffType;
    Begin
     Result:=False;
     While True do
       Begin
         CRead:=MaxRead;
         Try
           SetLength(tBuff,CRead);
         Except
           Break;
         End;
         CRead:=Recv(Sock.Sock,TBuff[0],CRead,0);
         IF (CRead=0) Then
           Begin
             Result:=True;
             Break;
           End;
         IF CRead=Socket_Error Then
           Begin
             FError:=WSAGetLastError;
             If FError=WSAEWOULDBLOCK Then
               Begin
                 FError:=0;
               End
             Else Result:=True;
             Break;
           End;
         Sock.Mem.Position:=Sock.Mem.Size;
         Sock.Mem.Write(TBuff[0],CRead);
         Inc(Sock.CountRecv,CRead);
       End;
    End;

  • McSimm © (03.07.08 21:33) [4]

    > GET http://yandex.ru/yandsearch?text=akiam HTTP/1.0

    Сомнение вызывает

    А если так:
    GET /yandsearch?text=akiam HTTP/1.0
    Host=yandex.ru
  • FireMan_Alexey (03.07.08 21:38) [5]
    И вот в самом tBuff уже такие данные как я описал в вопросе!
    Проверял при выключенном Файрволе.
    Я просто не могу понять, почему при прямом подключении все работает, а при подключении через проксю нет?
    Я понимаю, что т.к. моя прокси принимает только HTTP запрос с наличием
    стороки
    HOST: <имя хоста>[:<порт>]
    иногда не отрабатывают некоторые FLASH-и, но не могу понять почему?
    Как я понимаю в HTTP/1.* это поле обязательное для всех запросов!
    Хотя не могу точно утверждать по этому поводу, т.к. у меня с Английским плоховато и до самом РФЦ я избирательно читал :)
  • FireMan_Alexey (03.07.08 21:40) [6]
    >McSimm ©
    Предлагаеш убирать из заголовка строку с именем сервера?
  • McSimm © (03.07.08 21:53) [7]
    Попробовать либо использовать абсоютный путь без заголовка Host
    либо относительный, с использованием Host, как я указал.

    Возможно комбинация абсолютного URI и хоста и приводит в замешательство сервер ?
  • FireMan_Alexey (03.07.08 22:01) [8]
    Дело в том, что это последующий запрос от ИЕ:
    GET http://yandex.ruhttp//yandex.ru/yandsearch?text=akiam&lr=187 HTTP/1.0
    Accept=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
    Referer=http://www.yandex.ru
    Accept-Language=ru
    Proxy-Connection=Keep-Alive
    User-Agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host=yandex.ruhttp

  • McSimm © (03.07.08 22:33) [9]
    Все же придется трансформировать абсолютный в относительный.

    Вот результат telnet с абсолютным uri:

    GET http://yandex.ru/yandsearch?text=akiam HTTP/1.0
    Host:yandex.ru

    HTTP/1.1 302 Found
    Date: Thu, 03 Jul 2008 18:26:49 GMT
    Server: Apache/1.3.29 (Unix) mod_perl/1.29 mod_deflate/1.0.21 rus/PL30.19
    Set-Cookie: yandexuid=2412781215109609; path=/; domain=.yandex.ru; expires=Friday, 31-Dec-10 23:59:59 GMT
    Location: http://yandex.ruhttp://yandex.ru/yandsearch?text=akiam&lr=187
    Connection: close
    Content-Type: text/html
  • McSimm © (03.07.08 22:33) [10]
    А вот то же самое с относительным

    GET /yandsearch?text=akiam HTTP/1.0
    Host:yandex.ru

    HTTP/1.1 302 Found
    Date: Thu, 03 Jul 2008 18:29:58 GMT
    Server: Apache/1.3.29 (Unix) mod_perl/1.29 mod_deflate/1.0.21 rus/PL30.19
    Set-Cookie: yandexuid=1159791215109798; path=/; domain=.yandex.ru; expires=Friday, 31-Dec-10 23:59:59 GMT
    Location: http://yandex.ru/yandsearch?text=akiam&lr=187
    Connection: close
    Content-Type: text/html
  • McSimm © (03.07.08 22:36) [11]
    В случае с абсолютным uri наличие / отсутствие заголовка Host не влияет
  • umbra © (03.07.08 23:23) [12]
    а по-моему это развод :) код в [3] - полный бред
  • McSimm © (03.07.08 23:30) [13]
    код не при чем. я проверил, проблема есть.

    похоже, что по абсолютному uri надо обращаться только к прокси, при обращении к серверу нужен относительный.
  • FireMan_Alexey (04.07.08 16:46) [14]
    >McSimm ©

    Спасибо буду переделывать :)

    >umbra ©


    > а по-моему это развод :) код в [3] - полный бред


    Я привел пример работающего кода, я тестировал его локально (пока не было интернет) с апачами 1.3.33
    Если тебе не нравится логика, то извини на оптимальный код не претендую,
    но скажем мне удобней вызвать

    If ReadData(ClientSock,ClientBuff) Then
    Begin  
     Close(ClientSock);
    End;



    именно так, а вы я пишите как вам удобно и не кто ВАС за это не критикует! :)
    Если это было написано просто в шутку, то я думаю здесь есть отдельная ветвь для тех кому хочеться просто поговорить!!!

    Всем спасибо буду теперь изменять данные в запросе
 
Конференция "Сети" » Proxy-Server вопрос по RFC2068 [D6, Win95/98, Win2k, WinXP]
Есть новые Нет новых   [134432   +19][b:0][p:0.003]