You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by James Abley <ja...@gmail.com> on 2007/12/13 12:20:28 UTC

Range request header (and related headers) behaviour

Hi,

I'm starting to see more clients making Range requests (iPhone among them)
and I'm trying to understand how much work I have to do to support the
correct behaviour. I've been investigating Tomcat support for this (although
my application will be deployed in different servlet containers; definitely
Tomcat 5.0.x, 5.5.x and Weblogic 9.x currently) and comparing my
expectations with what I'm seeing.

Exhibit A - requesting content, adding a Range: bytes=0-1499 header to the
request.

GET /Protocols/rfc2616/rfc2616-sec14.html HTTP/1.1
Host: www.w3.org
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.8.1.11)
Gecko/20071127 Firefox/2.0.0.11
Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Range: bytes=0-1499

HTTP/1.x 206 Partial Content
Date: Thu, 13 Dec 2007 10:57:39 GMT
Server: Apache/2
Last-Modified: Wed, 01 Sep 2004 13:24:52 GMT
Etag: "3e3073913b100"
Accept-Ranges: bytes
Content-Length: 1500
Cache-Control: max-age=21600
Expires: Thu, 13 Dec 2007 16:57:39 GMT
P3P: policyref="http://www.w3.org/2001/05/P3P/p3p.xml"
Content-Range: bytes 0-1499/126444
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1



That works as expected, being served by Apache 2, returning a 206 response
with the partial body being returned.

When I request a page via Tomcat locally (requesting the Tomcat user
documentation), I get the following:

Exhibit B - request to Tomcat 5.0.30 ROOT webapp, adding a Range:
bytes=0-1499 header to the request.

GET / HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.8.1.11)
Gecko/20071127 Firefox/2.0.0.11
Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Range: bytes=0-1499

HTTP/1.x 200 OK
Content-Type: text/html;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Thu, 13 Dec 2007 11:01:23 GMT
Server: Apache-Coyote/1.1

i.e. a 200 response with the full response body.

But as part of the same request, the images are retrieved...

Exhibit C - related image request, adding a Range: bytes=0-1499 header to
the request.

GET /tomcat.gif HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.8.1.11)
Gecko/20071127 Firefox/2.0.0.11
Accept: image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost:8080/
Range: bytes=0-1499

HTTP/1.x 206 Partial Content
Etag: W/"1934-1101296588000"
Last-Modified: Wed, 24 Nov 2004 11:43:08 GMT
Content-Range: bytes 0-1499/1934
Content-Type: image/gif
Content-Length: 1500
Date: Thu, 13 Dec 2007 11:01:23 GMT
Server: Apache-Coyote/1.1

And these have a 206 response, with a partial response body.

I note that the Tomcat 4.0 functional specs talk about Range request support
[1], but not about how to ensure that it's enabled for all resources within
a webapp.

Questions:

1. Why doesn't the page served by the root item get returned as a partial
content response? It is a jsp page in the ROOT webapp, which comes as part
of the tomcat installation.
2. Why do the images react correctly to the Range request?
3. How can I get my resources to respond correctly to the Range request? Am
I missing some configuration thing?

I have a mixture of JSP with Struts 1.2 and Spring MVC. I'm thinking that
I'll need to find or write a Filter to handle this (particularly as it needs
to run on other containers; e.g. Weblogic), but it seems a shame that it
isn't part of the HTTP implementation within the container.

The related headers that I need to consider include Accept-Range, If-Range
and Content-Range. I can take care of setting ETags and Last-Modified
headers for my resources, so I just need to ensure that something is
handling the Range related functionality at some point.

Cheers,

James

[1]
http://tomcat.apache.org/tomcat-4.0-doc/catalina/funcspecs/fs-default.html
-- 
View this message in context: http://www.nabble.com/Range-request-header-%28and-related-headers%29-behaviour-tp14314129p14314129.html
Sent from the Tomcat - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Range request header (and related headers) behaviour

Posted by Tim Funk <fu...@joedog.org>.
The default servlet knows how to handle ranges.

JSP's and servlets on their own do not understand ranges. (Because 
typically custom code is written and out.println() is called).

The reason the default servlet can handle ranges is because the content 
is static. The size of the resource is known so one can easily do range 
checks appropriately.

JSP's/servlets content is generated on the fly. (Which is the main 
reason you see chunked encoding since we don't know the content length 
until your done serving the content)

That being said, you can make JSP's and servlets handle ranges by using 
a Filter (which I don't of yet) which can buffer the content of the JSP 
and only serve back the partial content as needed.

-Tim


James Abley wrote:
> Hi,
> 
> I'm starting to see more clients making Range requests (iPhone among them)
> and I'm trying to understand how much work I have to do to support the
> correct behaviour. I've been investigating Tomcat support for this (although
> my application will be deployed in different servlet containers; definitely
> Tomcat 5.0.x, 5.5.x and Weblogic 9.x currently) and comparing my
> expectations with what I'm seeing.


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org