only for RuBoard - do not distribute or recompile |
The Content-length header specifies the length of the data (in bytes) that is returned by the server. Due to the dynamic nature of some requests, the Content-length is sometimes unknown, and this header might be omitted.
There are three common ways that a client can retrieve data from the entity-body of the server's response:
The first method involves retrieving the size of the document from the Content-length header, and then reading in that much data from the network connection. Using this method, the client knows the size of the document before retrieving it.
In other cases, when the size of the document is too dynamic for a server to predict, the Content-length header is omitted. When this happens, the client reads in the data portion of the server's response until the server disconnects the network connection. This practice is obsolete and only works in HTTP 1.0. For generating data without knowing the total message length in advance, the next method is recommended.
Another header could indicate when an entity-body ends, like HTTP 1.1's Transfer-Encoding header with the chunked parameter.
In HTTP 1.1, the client does not have to retrieve the entire entity-body at once, but can get it in pieces, if the server allows it to do so. If the server declares that it supports byte ranges using the Accept-Ranges header:
HTTP/1.1 200 OK [Other headers here] Accept-Ranges: bytes
The client can then request the data in pieces. For example:
GET /largefile.html HTTP/1.1 [Other headers here] Range: 0-65535
When the server returns the specified range, it includes a Content-range header to indicate which portion of the document is being sent, and also to tell the client how long the file is:
HTTP/1.1 200 OK [Other headers here] Content-range: 0-65535/83028576
For caching purposes, a client can use the If-Range header along with Range to request an updated portion of the document only if the document has been changed. Here is an example:
GET /largefile.html HTTP/1.1 [Other headers here] If-Range: Mon, 02 May 1996 04:51:00 GMT Range: 0-65535
The If-Range header can use either a last modified date or an entity tag to verify that the document is still the same.
only for RuBoard - do not distribute or recompile |