Icecast Server enforcing case sensitivity on HTTP header Range "bytes" units
Clients making requests from Icecast 2.3.1 server with HTTP Range header using units "bytes" with any casing other then all lowercase fail request with:
HTTP/1.0 416 Request Range Not Satisfiable
It is expected that the HTTP Range header should be case insensitive on "bytes"
W3C rfc2616 HTTP 1.1 sec 2.1 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.1) states about BNF literals "Unless stated otherwise, the text is case-insensitive."
Section 3.12 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.12) which defines the Range units defines "bytes", but does not specify case sensitivity.
Here is an example localhost request/response against an icecast 2.3.1 server with Range units as "Bytes":
REQUEST: **************\n
GET /TheBeginning.mp3 HTTP/1.1\r\n
Range: Bytes=0-\r\n
Host: localhost\r\n
Accept: */*\r\n
\r\n
RESPONSE: **************\n
HTTP/1.0 416 Request Range Not Satisfiable\r\n
\r\n
Here is an example localhost request/response against an icecast 2.3.1 server with Range units as "bytes" (data truncated):
REQUEST: **************\n
GET /TheBeginning.mp3 HTTP/1.1\r\n
Range: bytes=0-\r\n
Host: localhost\r\n
Accept: */*\r\n
\r\n
RESPONSE: **************\nHTTP/1.1 206 Partial Content\r\n
Date: Wed, 10-Oct-2007 19:29:28 GMT\r\n
Content-Length: 7064799\r\n
Content-Range: bytes 0-7064798/7064799\r\n
Content-Type: audio/mpeg\r\n
\r\n
ID3\x002\x000\x000\x000\x000\x010BTT2\x000\x000\x00F\x000The Beginning
Here is an example localhost request/response against an Apache 1.3.37 (Unix) server with Range units as "Bytes" (data truncated):
REQUEST: **************\n
GET http://www.foldedspace.org:80/files/vintage/Nipper's%20Greatest%20Hits_%201901-1920/17%20Come%20Josephine%20In%20My%20Flying%20Machine.mp3 HTTP/1.1\r\n
Range: Bytes=0-\r\n
Host: www.foldedspace.org\r\n
Accept: */*\r\n
\r\n
RESPONSE: **************\nHTTP/1.1 206 Partial Content\r\n
Connection: Keep-Alive\r\n
Content-Length: 2411015\r\n
Date: Wed, 10 Oct 2007 23:31:58 GMT\r\n
Content-Range: bytes 0-2411014/2411015\r\n
Content-Type: audio/mpeg\r\n
ETag: "63dc404-24ca07-4459501b"\r\n
Server: Apache/1.3.37 (Unix) mod_throttle/3.1.2 DAV/1.0.3 mod_fastcgi/2.4.2 mod_gzip/1.3.26.1a PHP/4.4.7 mod_ssl/2.8.22 OpenSSL/0.9.7e\r\n
Last-Modified: Thu, 04 May 2006 00:51:39 GMT\r\n
Accept-Ranges: bytes\r\n
Keep-Alive: timeout=2, max=100\r\n
\r\n
ID3\x002\x000\x000\x000\x000\x012\x002TT2\x000\x000%\x000Come Josephine In My Flying Machine
Here is an example localhost request/response against an IIS 6.0 server with Range units as "Bytes" (data truncated):
REQUEST: **************\n
GET http://kuow.org:80/mp3high/mp3/WeekdayA/WeekdayA20071010.mp3 HTTP/1.1\r\n
Range: Bytes=0-\r\n
Host: kuow.org\r\n
Accept: */*\r\n
\r\n
RESPONSE: **************\n
HTTP/1.1 206 Partial Content\r\n
Connection: Keep-Alive\r\n
Content-Length: 25918483\r\n
Date: Wed, 10 Oct 2007 23:26:17 GMT\r\n
Content-Range: bytes 0-25918482/25918483\r\n
Content-Type: audio/mpeg\r\n
ETag: "449237ff5ebc81:2a4"\r\n
Server: Microsoft-IIS/6.0\r\n
Last-Modified: Wed, 10 Oct 2007 17:00:01 GMT\r\n
Accept-Ranges: bytes\r\n
X-Powered-By: ASP.NET\r\n
\r\n
√P╚\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000Info