Re: 206 response for Chrome Mobile

Andrew Akers <[email protected]> Thu, 10 Dec 2015 14:50:17 -0800
Newsgroups gmane.comp.audio.icecast.devel
Message-ID <[email protected]>
> On Dec 10, 2015, at 05:57, Philipp Schafft <[email protected]> wrote:
> 
> Good morning,
> 
> On Wed, 2015-12-09 at 17:39 -0800, Andrew Akers wrote:
>> Hi -
>> 
>> I'm using Icecast to stream some audio that I embed in an <audio> tag
>> on a webpage. This is working great for desktop browsers and on iOS,
>> but it doesn't work on Android.
>> 
>> It looks like Chrome mobile sends the header "Range: bytes=0-1" and
>> then doesn't try to load any more data when Icecast responds with a 0
>> byte "HTTP/1.0 200 OK" response. From my reading of the HTTP spec, it
>> looks like there's two options here: either ignore the range header
>> entirely, or return a 206 response along with headers indicating the
>> kinds of range responses we can deal with. Here, it doesn't look like
>> Icecast does either.
>> 
>> The headers:
>> Request:
>> GET /mount.mp3 HTTP/1.1
>> Host: host:8000
>> Connection: keep-alive
>> User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5X Build/MDB08L)
>> AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.76 Mobile
>> Safari/537.36
>> Accept: */*
>> Referer: https://host/
>> Accept-Encoding: gzip, deflate, sdch
>> Accept-Language: en-US,en;q=0.8
>> Range: bytes=0-1
> 
> Asking for bytes=0-1 is a strange thing to do anyway! Sounds like a
> strange workaround to me.

I agree it’s a weird hack. They’re probably checking to see if the server supports range.

> 
>> Response:
>> HTTP/1.0 200 OK
>> Server: Icecast 2.4.2
>> Date: Thu, 10 Dec 2015 01:23:11 GMT
>> Content-Type: audio/mpeg
>> Cache-Control: no-cache
>> Expires: Mon, 26 Jul 1997 05:00:00 GMT
>> Pragma: no-cache
>> Access-Control-Allow-Origin: *
>> icy-br: 32
>> ice-audio-info: bitrate=32;channels=1;samplerate=44100
>> icy-description: Description
>> icy-genre: None
>> icy-name: mount
>> icy-pub: 0
>> icy-url: https://host/
> 
> Ok, how much data you get?
> 
> I just tried with Icecast2 2.4.2 and with *exactly* your request (using
> netcat). I got a 200 OK (as expected) and got the data from the stream.
> Which is in my opinion exactly what you said above and also how I
> understand the specs: it ignored the the range header completely.
> 
>> Is there a quick patch to disable range support, or a place you can
>> point me to in the code that might be causing this behavior?
> 
> There is no config setting here. It's all implemented in
> fserve_client_create() in fserve.c. Which is not even called from the
> code path for active mounts. It is only called when sending flat files
> from the filesystem. And it will fall back to ignoring the range header
> in case there is a problem (like a seek failed).
> 
> Please come back to me and tell me how much data you got from the server
> with your request?
> 

Weird. I definitely got 0 bytes, according to the Chrome dev tools. I might have to go raise a ticket with them.
I’ll test it out again tomorrow.

> I more suspect your client implementation cutting the data after the
> expected amount. As this request already looks like a strange workaround
> for something I'm not too sure their implementation is all correct here.
> 

Yeah, it looks like a weird check to see if the server supports range. I’ll poke at it again tomorrow, and report the results.

> Looking forward to your reply!
> 
> --
> Philipp.
> (Rah of PH2)

Thanks!
______________
Andrew Akers
[email protected]

_______________________________________________
Icecast-dev mailing list
[email protected]
http://lists.xiph.org/mailman/listinfo/icecast-dev
signature.asc (application/pgp-signature, 801 B)
-----BEGIN PGP SIGNATURE-----

iQIcBAEBCAAGBQJWagGpAAoJEJ2wr3qhBQxafXsP+gPOQP48kU+fGC/eevvXezAv
qFSb9TLWhg7uecjZw0nrXO/zyfo962ko7NLTa7l+Iz/nFMfeqriXNnegL8hzcrLa
h9Ls9cirGPk1IXhCg4nisGylrRWOP3h+JGudAtJY+E3tIPdCrF8KiMCq0RAwqUdg
XHaoVgcCt+VdyNysGJHUxsXezYEYUWgi0D72haNdV8cSoAFw+zuWXYGvccWZLNK+
C6kdfCTV4ooYNj8JCPEb0UhHtn3CRRlOLvict8MttaVKiCjVS3Jd3fCDEs7STaGn
MB7RbBcKX/XvuWcm43NzrVk9QVglNbpnuVkjvKh73KlE/VbHVcA29nHASvjfUQAB
U9En9GITMKCClCkFyJLrBHzKIHxlwAPodk6Ps4u34TMBMrEM8fMdxwyBiYxkB7Tk
iHWfq/PT8Cfsivd/T7hbdzqhNA8IKYKQCojMZuRFTlIPh4acF7Q1pnMQ5R4WWn+W
76DJ3bJiUUjaVDVwN7iBAAmfURyXyxYGk4BFdbC2TLiBsZi/fRmTR38RUBMEwo7M
vNfO6+BgeATs6r3aFdYZrNlri2aiiGgs/JlxCPDL63h2biH9o1jaqwoJiW80IiYo
llOd5htme98CpDRvFbc3QzotCOxI7cGaqhEfmf9tx9XJKQbLwgy2pSV+kW9oK/hH
gy8v+kmy7jTcSoIDlcU4
=lAbM
-----END PGP SIGNATURE-----