-
Клиент моему серверу: GET http: 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 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: Connection=close
Content-Type=text/html Собственно вопрос, почему апаче склеивает имя хоста с конкретным урлом запроса. У меня когда посылаю запрос на прямую нормально отрабатывает, а когда через прокси, то вот такая ерунда! Сам браузер воспринимает как переадресацию на yandex.ruhttp. Как этого избежать может кто-то сталкивался с данной проблемой. Логика прокси принял переслал я не меняю данные, а "=" после ключевых слов, а не ":" сделано для удобства просмотра отношения к траспортной логике не имеет! Я посмотрел в РФЦ там сказано, что должен быть абсолютный урл запроса а тут какая-то склейка непонятная для меня и как ее обрабатывать? тем более, что в моем случае нормально не обрбатывает браузер.
-
> FireMan_Alexey (02.07.2008 18:45:00) [0]
Это ошибка, только где, в программе, в прокси, в Яндексе.
-
> Собственно вопрос, почему апаче склеивает имя хоста с конкретным > урлом запроса. > У меня когда посылаю запрос на прямую нормально отрабатывает, > а когда через прокси, то вот такая ерунда!
это не апач, а прокси кривой :) и он таки меняет данные :)
-
>umbra © Это результат выполнения RECV-a, только у меня в прокси для тестирования выведено окно, в которое он выводит по строчно заголовок. Сам заголовок определяет по #13#10#13#10 за ним данные которые игнорируются! Есть буфер в который собирается информация до отправки к серверу, на тот случай если заголовок будет приходить частями! Буфер - мой класс распределения памяти, который уже не первый год использую и в нем ошибок быть не может! Да мой прокси по сути испоьзует только HTTP протокол. Вот кусок кода принятия данных: Const
MaxRead=8192;
Function TMyProxyClient.ReadData:Boolean; 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;
-
-
И вот в самом tBuff уже такие данные как я описал в вопросе! Проверял при выключенном Файрволе. Я просто не могу понять, почему при прямом подключении все работает, а при подключении через проксю нет? Я понимаю, что т.к. моя прокси принимает только HTTP запрос с наличием стороки HOST: <имя хоста>[:<порт>] иногда не отрабатывают некоторые FLASH-и, но не могу понять почему? Как я понимаю в HTTP/1.* это поле обязательное для всех запросов! Хотя не могу точно утверждать по этому поводу, т.к. у меня с Английским плоховато и до самом РФЦ я избирательно читал :)
-
>McSimm © Предлагаеш убирать из заголовка строку с именем сервера?
-
Попробовать либо использовать абсоютный путь без заголовка Host либо относительный, с использованием Host, как я указал.
Возможно комбинация абсолютного URI и хоста и приводит в замешательство сервер ?
-
Дело в том, что это последующий запрос от ИЕ: GET http: 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: Accept-Language=ru
Proxy-Connection=Keep-Alive
User-Agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host=yandex.ruhttp
-
Все же придется трансформировать абсолютный в относительный. Вот результат 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=187Connection: close Content-Type: text/html
-
А вот то же самое с относительным 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=187Connection: close Content-Type: text/html
-
В случае с абсолютным uri наличие / отсутствие заголовка Host не влияет
-
а по-моему это развод :) код в [3] - полный бред
-
код не при чем. я проверил, проблема есть.
похоже, что по абсолютному uri надо обращаться только к прокси, при обращении к серверу нужен относительный.
-
>McSimm © Спасибо буду переделывать :) >umbra © > а по-моему это развод :) код в [3] - полный бред
Я привел пример работающего кода, я тестировал его локально (пока не было интернет) с апачами 1.3.33 Если тебе не нравится логика, то извини на оптимальный код не претендую, но скажем мне удобней вызвать If ReadData(ClientSock,ClientBuff) Then
Begin
Close(ClientSock);
End; именно так, а вы я пишите как вам удобно и не кто ВАС за это не критикует! :) Если это было написано просто в шутку, то я думаю здесь есть отдельная ветвь для тех кому хочеться просто поговорить!!! Всем спасибо буду теперь изменять данные в запросе
|