Good point. In my example, I was simply testing if the last modified header was sent by the client at all, but really it should be compared to the date the feed was last modified. That would let you test if the client's cache is outdated or not.
-- Hector On Fri, Dec 11, 2009 at 4:28 AM, Pádraic Brady <[email protected]>wrote: > Be careful with the logic - the Last-Modified header shouldn't be based on > the client header (base it on the date the feed was last modifed). You > should also send a relevant Etag since it's often also expected by clients > using a conditional GET request. > > Paddy > > Pádraic Brady > > http://blog.astrumfutura.com > http://www.survivethedeepend.com > OpenID Europe Foundation Irish Representative<http://www.openideurope.eu/> > > > ------------------------------ > *From:* Hector Virgen <[email protected]> > *To:* takeshin <[email protected]> > *Cc:* [email protected] > *Sent:* Thu, December 10, 2009 9:24:37 PM > *Subject:* Re: [fw-general] Zend_Feed - sending proper headers > > You'll want to use a mix of server-side caching and client-side caching. > The server-side caching can be done with Zend_Cache. That way if two > separate users try to access the feed, your application only needs to build > it once. > > For client-side caching, you'll need to analyze the request and send the > correct response headers. > > I use something like this: > > public function viewAction() > { > $request = $this->getRequest(); > $response = $this->getResponse(); > // Enable browser caching > $response->setHeader('Cache-Control', 'private, max-age=10800, > pre-check=10800', true); > $response->setHeader('Pragma', 'private', true); > $response->setHeader('Expires', date(DATE_RFC822, strtotime(' 2 day')), > true); > // Check for client cache > if (null !== ($modified = $request->getServer('HTTP_IF_MODIFIED_SINCE'))) > { > // User has cached page, send 304 "not modified" header > $response->setHeader('Last-Modified', $modified, true); > $response->setHttpResponseCode(304); > } else { > // User does not have cached page, build response body > */* Your server-side caching code goes here */* > * $response->setBody($feed);* > } > // Send response > $response->sendResponse(); > exit; > } > > I hope this helps. > > -- > Hector > > > On Thu, Dec 10, 2009 at 12:48 PM, takeshin <[email protected]> wrote: > >> >> How to send feeds properly? >> >> I want browser read whole file, only if it has new entries. >> >> I read data from the database. Limit result to 15 items. >> Then create an array and pass it to the Zend_Feed. >> >> Shall I cache the above steps with Zend_Cache + very long lifetime, >> and use a cache tag, clean cache entries by tag when new article is >> posted? >> >> Then, is it enough to use send() method? >> Do browsers read last-modified entry from the feed itself, >> or only from the HTTP headers? >> >> -- >> regards >> takeshin >> >> -- >> View this message in context: >> http://n4.nabble.com/Zend-Feed-sending-proper-headers-tp960516p960516.html >> Sent from the Zend Framework mailing list archive at Nabble.com. >> > >
