Задавал вопрос на другом форуме, но никто не смог ответить, можут тут кто знает
Для настройки кэширования, решил использовать параметр из 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" и остальные возвращает нормально!