Ich versuche, einige mp3-Dateien über den html5 Audio-Tag abzuspielen. Für den Desktop funktioniert das super (mit Chrome), aber wenn es um die mobilen Browser geht (auch Chrome (für Android)), scheint es einige Schwierigkeiten zu geben:
Ich habe den Stream mit einem Passwort geschützt und deshalb muss der Streaming-Server ein spezielles Authentifizierungs-Cookie (Spring Security Remember-Me) finden. Aber irgendwie sendet der mobile Browser diesen Cookie nicht, wenn er über das Audio-Tag auf den mp3-Stream zugreift. Wenn ich die Stream-URL direkt in die Adresszeile eingebe, funktioniert alles einwandfrei.
Während ich nach dem verlorenen Cookie suchte, fand ich heraus, dass der mobile Browser immer noch einige Cookies (z. B. die JSESSIONID) sendet, aber nicht alle. Weitere Untersuchungen (schnelles PoC mit PHP) ergaben, dass sich die mobilen Browser anscheinend weigern, Cookies über das Audio-Tag zu senden, auf dem das HttpOnly Flag gesetzt ist. Also meine Frage ist:
Ist dies ein bestimmtes Verhalten, warum gibt es Unterschiede zwischen der mobilen Version und der Desktopversion (von Chrome) und gibt es eine Möglichkeit, das Verhalten von der Clientseite aus zu steuern?
Bei näherer Betrachtung der HTTP-Pakete habe ich festgestellt, dass der Android-Browser den mp3-Stream selbst nicht anfordert, sondern dies an stagefright (einige Android-Multimedia-Clients) delegiert. Eine schnelle Suche ergab, dass für die alten Android-Versionen (vor 4.0) stagefright keine Cookies verarbeiten kann:
Meine eigenen Tests haben dies bestätigt. Der alte Lampenfieber (Android 2.3.x) sendet überhaupt keine Cookies, der Lampenfieber von einer europäischen S3 (Android 4.1.2, stagefright 1.2) sendet nur die Cookies, die NICHT das httpOnly Flag haben.
Ich denke also, dass jeder selbst entscheiden muss, welche Lösung er verwenden möchte:
Hinweis: Das Problem mit der einfachen Deaktivierung von httpOnly besteht darin, dass Sie Ihre gesamte Anwendung für Cookie-Hijacker anfällig machen. Eine andere mögliche Lösung wäre ein spezielles Remember-Cookie für den Stream (ohne httpOnly) und ein weiteres Rememberme-Cookie mit httpOnly, das aktiviert ist.
Ich hatte das gleiche Problem und die Deaktivierung von HttpOnly oder Secure flags auf Cookies löste das Problem auf Android 4.2 und 4.4 Chrome Browser nicht.
Endlich habe ich die Ursache gefunden. Ich hatte einen Cookie mit dem Wert, der die Sonderzeichen Doppelpunkt (:) und Pipe (|) enthielt. Nachdem das Cookie mit Sonderzeichen deaktiviert wurde, werden die Videos in Android 4.2 und 4.4 wiedergegeben.
Hoffe das hilft jemandem.
Tags und Links html5-audio mobile-browser cookie-httponly