0

我用java开发了一个轻量级的web服务器(非常轻量级),他的目的主要是流音频。

在网页上,我有一个简单的 html5 音频标签。当我在浏览器中加载页面时,浏览器对音频文件发出 GET 请求,它工作正常。但是当我暂停/播放或搜索时,浏览器会在 X 字节处发出带有 Range 条件的请求

GET /audio/3f6dbbd6adcb5eb4ea4cd981f30a6c409727bbf202367df18d4dd1a91a959fdb HTTP/1.1
Host: localhost:8888
Connection: keep-alive
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.16 (KHTML, like Gecko) Chrome/24.0.1304.0 Safari/537.16
Accept: */*
Referer: http://localhost:8888/stream/3f6dbbd6adcb5eb4ea4cd981f30a6c409727bbf202367df18d4dd1a91a959fdb
Accept-Language: en-US,en;q=0.8,fr;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Range: bytes=360448-

我让我的服务器回复了一个 206 Partial Content 条件:

HTTP/1.1 206 Partial Content
Date : Wed Nov 07 08:07:32 CET 2012
Content-Length:11126914
Content-Range: bytes 360448-11487361
Accept-Ranges: bytes
Content-Type : audio/mpeg

当然是从 360448 字节开始的二进制数据,但是浏览器似乎不喜欢它,当我在浏览器上观看网络数据时,它甚至似乎都没有得到回复(连接被标记为已取消) .

我试图观察 apache 服务器会发生什么,但这有点困难,因为浏览器总是使用 200(缓存),这意味着它使用 mp3 的缓存版本,因此没有对服务器的请求。

我尝试作弊并使用另一个响应号,例如 200 甚至 304(某些服务器似乎使用它),但这里没有运气。

在这个过程中我做错了什么?如果需要,我可以提供更多日志

4

1 回答 1

2

根据http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16,标题应该是

Content-Range: bytes 360448-11487361/11487362

11487362是文件的完整大小,11487361是最后一个从 0 开始的字节偏移量。

于 2012-11-07T07:34:16.147 回答