Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.21;
Скачать: CL | DM;

Вниз

Proxy-Server вопрос по RFC2068   Найти похожие ветки 

 
FireMan_Alexey   (2008-07-02 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 ©   (2008-07-03 08:35) [1]

> FireMan_Alexey  (02.07.2008 18:45:00)  [0]

Это ошибка, только где, в программе, в прокси, в Яндексе.


 
umbra ©   (2008-07-03 13:42) [2]


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


это не апач, а прокси кривой :) и он таки меняет данные :)


 
FireMan_Alexey   (2008-07-03 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 ©   (2008-07-03 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   (2008-07-03 21:38) [5]

И вот в самом tBuff уже такие данные как я описал в вопросе!
Проверял при выключенном Файрволе.
Я просто не могу понять, почему при прямом подключении все работает, а при подключении через проксю нет?
Я понимаю, что т.к. моя прокси принимает только HTTP запрос с наличием
стороки
HOST: <имя хоста>[:<порт>]
иногда не отрабатывают некоторые FLASH-и, но не могу понять почему?
Как я понимаю в HTTP/1.* это поле обязательное для всех запросов!
Хотя не могу точно утверждать по этому поводу, т.к. у меня с Английским плоховато и до самом РФЦ я избирательно читал :)


 
FireMan_Alexey   (2008-07-03 21:40) [6]

>McSimm ©
Предлагаеш убирать из заголовка строку с именем сервера?


 
McSimm ©   (2008-07-03 21:53) [7]

Попробовать либо использовать абсоютный путь без заголовка Host
либо относительный, с использованием Host, как я указал.

Возможно комбинация абсолютного URI и хоста и приводит в замешательство сервер ?


 
FireMan_Alexey   (2008-07-03 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 ©   (2008-07-03 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 ©   (2008-07-03 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 ©   (2008-07-03 22:36) [11]

В случае с абсолютным uri наличие / отсутствие заголовка Host не влияет


 
umbra ©   (2008-07-03 23:23) [12]

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


 
McSimm ©   (2008-07-03 23:30) [13]

код не при чем. я проверил, проблема есть.

похоже, что по абсолютному uri надо обращаться только к прокси, при обращении к серверу нужен относительный.


 
FireMan_Alexey   (2008-07-04 16:46) [14]

>McSimm ©

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

>umbra ©


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


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

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


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

Всем спасибо буду теперь изменять данные в запросе



Страницы: 1 вся ветка

Текущий архив: 2010.03.21;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.009 c
2-1263993297
Чайник
2010-01-20 16:14
2010.03.21
Кириллица в OpenGL


15-1262156174
12
2009-12-30 09:56
2010.03.21
Можно ли как-то управлять кэшем mssql server?


13-1124902059
jenbond
2005-08-24 20:47
2010.03.21
Мысли по вопросу о создании web приложения


6-1214365922
brother
2008-06-25 07:52
2010.03.21
TWebBrowser


6-1214837103
Валентин
2008-06-30 18:45
2010.03.21
Эмуляция DHCP