You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Rob Walker (JIRA)" <ji...@apache.org> on 2008/10/13 08:06:44 UTC
[jira] Closed: (FELIX-407) Enhance default Http resource handling
to support "conditional GET"
[ https://issues.apache.org/jira/browse/FELIX-407?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Rob Walker closed FELIX-407.
----------------------------
Resolution: Fixed
Fix applied - code based on solution used in standard Jnlp servlet.
Might still need checks / extension for Jar based resources to ensure timestamps retrieved correctly.
> Enhance default Http resource handling to support "conditional GET"
> -------------------------------------------------------------------
>
> Key: FELIX-407
> URL: https://issues.apache.org/jira/browse/FELIX-407
> Project: Felix
> Issue Type: Improvement
> Components: HTTP Service
> Reporter: Rob Walker
> Assignee: Rob Walker
> Priority: Minor
>
> Whilst creating a generic "file serving" servlet, I realised our default HTTP resource serving in org.apache.felix.http.jetty.OsgiResourceHandler does not actually support "conditional GET" functionalty.
> A few, relatively simple, mods could be made to support this:
> (1) - enhance default handler to include last modified time in responses e.g.
> response.setDateHeader("Last-Modified", urlConn.lastModified());
> Note however, that Sun in their JNLP servlet document a bug where "file:" URL resources do not return last modified correctly, so an extra test is needed for file URLs. Following is from Sun JnlpDownloadServlet:
> <code>
> try {
> // Get last modified time
> conn = resource.openConnection();
> lastModified = conn.getLastModified();
> } catch (Exception e) {
> // do nothing
> }
>
> if (lastModified == 0) {
> // Arguably a bug in the JRE will not set the lastModified for file URLs, and
> // always return 0. This is a workaround for that problem.
> String filepath = context.getRealPath(path);
> if (filepath != null) {
> File f = new File(filepath);
> if (f.exists()) {
> lastModified = f.lastModified();
> }
> }
> <code>
> (2) check incoming requests for a "If-Modified-Since" header, and if present check against the file timestamp. If server file has not change since this time, return a 304 (SC_NOT_MODIFIED) status
> Found a useful summary from which I based the above here:
> (3) for extra robustness on "file" resources the above can be extended to also use a combination of an "ETag" header e.g. made up of file timestamp + file size & a check against the "If-None-Match" request header
> http://fishbowl.pastiche.org/2002/10/21/http_conditional_get_for_rss_hackers
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.