[ https://issues.apache.org/jira/browse/FELIX-407?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Rob Walker reassigned FELIX-407: -------------------------------- Assignee: Rob Walker > 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.