[
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.