parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Обработка If-Modified-Since и If-None-Match

Азат Разетдинов 17.10.2006 21:08 / 17.10.2006 21:10

Если верить PAFу, возиться с сабжем не стоит, т. к. браузер сам всё сделает. Тем не менее Яндекс советует (да и Google рекомендует) обрабатывать If-Modified-Since.

Для этой цели и был написан следующий метод.
@ifModified[jCode]
^if($response:[last-modified] is date){
	$response:last-modified[^dtf:to822[$response:last-modified]]
}
^if(
	$env:REQUEST_METHOD eq GET
&&
	(!$response:status || $response:status == 200)
&&
	($env:HTTP_IF_NONE_MATCH eq '*'
	|| def $response:etag && $response:etag eq $env:HTTP_IF_NONE_MATCH
	|| def $response:[last-modified]
	&& $response:[last-modified] eq $env:HTTP_IF_MODIFIED_SINCE)
){
	$response:status(304)
}{
	$result[$jCode]
}
Для корректной работы необходимо указать $response:last-modified и/или $response:etag в любом из методов @auto[]. Для last-modified лучше всего подходит $file.mdate или значение столбца timestamp в бд. В качестве etag может служить md5-отпечаток текста или тот же last-modified, заключённый в кавычки.

Вызывается метод так:
@main[]
^ifModified{
	...
}
См. также:
Header Field Definitions
Обсуждение Conditional GET

  • Обработка If-Modified-Since и If-None-Match, Азат Разетдинов [M] 17.10.2006 21:08 / 17.10.2006 21:10