| Content Encoding Support for libcurl | |
| * About content encodings: | |
| HTTP/1.1 [RFC 2616] specifies that a client may request that a server encode | |
| its response. This is usually used to compress a response using one of a set | |
| of commonly available compression techniques. These schemes are `deflate' (the | |
| zlib algorithm), `gzip' and `compress' [sec 3.5, RFC 2616]. A client requests | |
| that the sever perform an encoding by including an Accept-Encoding header in | |
| the request document. The value of the header should be one of the recognized | |
| tokens `deflate', ... (there's a way to register new schemes/tokens, see sec | |
| 3.5 of the spec). A server MAY honor the client's encoding request. When a | |
| response is encoded, the server includes a Content-Encoding header in the | |
| response. The value of the Content-Encoding header indicates which scheme was | |
| used to encode the data. | |
| A client may tell a server that it can understand several different encoding | |
| schemes. In this case the server may choose any one of those and use it to | |
| encode the response (indicating which one using the Content-Encoding header). | |
| It's also possible for a client to attach priorities to different schemes so | |
| that the server knows which it prefers. See sec 14.3 of RFC 2616 for more | |
| information on the Accept-Encoding header. | |
| * Current support for content encoding: | |
| Support for the 'deflate' and 'gzip' content encoding are supported by | |
| libcurl. Both regular and chunked transfers should work fine. The library | |
| zlib is required for this feature. 'deflate' support was added by James | |
| Gallagher, and support for the 'gzip' encoding was added by Dan Fandrich. | |
| * The libcurl interface: | |
| To cause libcurl to request a content encoding use: | |
| curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, <string>) | |
| where <string> is the intended value of the Accept-Encoding header. | |
| Currently, libcurl only understands how to process responses that use the | |
| "deflate" or "gzip" Content-Encoding, so the only values for | |
| CURLOPT_ACCEPT_ENCODING that will work (besides "identity," which does | |
| nothing) are "deflate" and "gzip" If a response is encoded using the | |
| "compress" or methods, libcurl will return an error indicating that the | |
| response could not be decoded. If <string> is NULL no Accept-Encoding header | |
| is generated. If <string> is a zero-length string, then an Accept-Encoding | |
| header containing all supported encodings will be generated. | |
| The CURLOPT_ACCEPT_ENCODING must be set to any non-NULL value for content to | |
| be automatically decoded. If it is not set and the server still sends encoded | |
| content (despite not having been asked), the data is returned in its raw form | |
| and the Content-Encoding type is not checked. | |
| * The curl interface: | |
| Use the --compressed option with curl to cause it to ask servers to compress | |
| responses using any format supported by curl. | |
| James Gallagher <jgallagher@gso.uri.edu> | |
| Dan Fandrich <dan@coneharvesters.com> |