Показать сообщение отдельно
  #1  
Старый 17.03.2017, 09:57
ford ford вне форума
Прохожий
 
Регистрация: 17.03.2017
Сообщения: 2
Версия Delphi: Delphi7
Репутация: 10
Восклицание TWebModule непонятки с IfModifiedSince

Задавал вопрос на другом форуме, но никто не смог ответить, можут тут кто знает
Для настройки кэширования, решил использовать параметр из HTTP запроса
IfModifiedSince. Т.е. на сколько я понял, то в этом поле передается дата файла хранящегося в кэше браузера клиента. CGI-приложение, проверяет эту дату и дату файла хранящегося на сервере, и если даты не поменялись, то возвращает статус 304, и пустой поток.
Периодически, при обращении к этому полю объекта Request Класса TWebRequest, приложение вылетает с ошибкой 500 Internal server error
HTTP запрос выглядит вполне корректно:

Код:
Accept */*
Accept-Encoding gzip, deflate
Accept-Language ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Cache-Control max-age=0
Connection keep-alive
Cookie nut=7b8e525fd6d014a036822efa1e868dcc
Host test.tst
If-Modified-Since Mon, 13 Mar 2017 16:00:46 GMT

HTTP заголовок ответа:

Код:
Connection close
Content
Content-Length 129
Content-Type text/html; charset=windows-1251
Date Thu, 16 Mar 2017 07:29:50 GMT


А вот содержимое ответа:

Код HTML:
<html><body><h1>Internal Application Error</h1> <p>'Tue' is not a valid integer value <p><hr width="100%"></body></html>


Сделал проверку, непосредственно в теле процедуры ответа:

Код:
procedure TCGI.WebModule1indexAction(Sender: TObject;
 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var st:TstringList;
begin
//main func

st:=TStringList.Create;
st.LoadFromFile(ExtractFileDir(ParamStr(0))+'\111.log');
try
 st.Append(request.Query+' : '+DateTimeToStr(Request.IfModifiedSince));
except
 on e : Exception do
 st.Append(request.Query+' : exception:'+e.Message);
end;
st.SaveToFile(ExtractFileDir(ParamStr(0))+'\111.log');
st.Free;
....



Содержимое лога вот такое:

Код:
what=/index.html&id=200&log=1 : 29.12.1899
what=/css/struct.css : exception:'Tue' is not a valid integer value
what=/image/img.png : exception:'Mon' is not a valid integer value


Т.е. поле IfModifiedSince, в TwebRequest, работает не правильно, не может преобразовать строку типа "Mon, 13 Mar 2017 16:00:46 GMT" в тип TDateTime

Тогда вопрос: Как вытащить заголовок HTTP запроса?
Я сам распарсю это поле, но как его получить?

попробовал вытащить в виде строки значение этого поля

Код:
Request.GetFieldByName('If-Modified-Since')

возвращает всегда пустую строку, несмотря на то что в заголовке HTTP запроса этот параметр есть!!! Его видно в Firebug!!
Попробовал получить значения других полей, нуу мало ли может не работает, класс то абстрактный.
Значения полей "Connection", "Refer" и остальные возвращает нормально!
Ответить с цитированием