Приложение Sinatra с единорогом и memcached должно возвращать коды 304 для попадания в кеш?

У меня есть приложение ruby, настроенное на Heroku с использованием фреймворка Sinatra. Веб-сервер является единорогом, и когда запрос находит свое содержимое в кеше memcached (через гем Dalli), он говорит cache: [GET /] fresh, поэтому он явно извлекает содержимое из кеша. Однако, когда я проверяю заголовки, код ответа всегда равен 200 вместо 304. У меня сложилось впечатление, что когда страница обслуживается из кеша, поскольку она все еще свежая, код ответа должен быть 304.

Это работает так, как задумано, и я что-то не понимаю? Юникорн просто не выдает 304 кода, когда находит что-то в кеше? Должен ли я просто не беспокоиться о таких вещах?

Любое руководство приветствуется.


person Derek    schedule 27.08.2012    source источник
comment
304 относится не к кешу на стороне вашего сервера, а к кешу браузера. Вы/сервер должны правильно устанавливать/обрабатывать заголовки ETag/If-None-Match.   -  person    schedule 09.12.2012
comment
Я изучу заголовки ETags/If-None-Match.   -  person Derek    schedule 11.12.2012


Ответы (2)


Unicorn не может знать, как ваше приложение обрабатывает кэширование. Поэтому он не может установить etags для вас.

Как сказал Раджеш, 304 касается кеша браузера. Вам нужно будет сгенерировать хэш Etag в своем приложении, а затем отправить его в браузер (через заголовок).

Согласно этому сообщению, браузеры поддерживают etags: Поддержка браузера для eTags etags.

Вот официальный документ по 304: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5

Изменить: посмотрите здесь, чтобы реализовать его с помощью Sinatra:

http://www.sinatrarb.com/intro#Cache%20Control

http://opensoul.org/blog/archives/2011/01/29/etags-with-memcached/

person Vallières    schedule 13.12.2012

Если клиент выполнил условный запрос GET и доступ разрешен, но документ не был изменен, сервер ДОЛЖЕН ответить этим кодом состояния.

Источник

Так что, вероятно, единорог не делает то, что должен делать (и, семантически, код ответа 200 имеет смысл).

person pczora    schedule 13.12.2012