我一直在研究一个jquery插件,它使用HTML5音频播放器()来播放mp3。我注意到在各种浏览器中,当加载音频播放器时,对同一个MP3文件发出了多个GET请求。
我创建了一个简单的独立HTML文件来测试它。
<html>
<head></head>
<body>
<audio controls src="http://localhost:5000/files/one.mp3" type="audio/mp3"></audio>
<body>
<html>
在OS X Safari 5.0.1中打开页面时,我从Web服务器看到了以下日志(3个GET请求):
>> Thin web server (v1.2.7 codename No Hup)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:5000, CTRL+C to stop
127.0.0.1 - - [17/Aug/2010 11:09:32] "GET /one.mp3 HTTP/1.1" 200 4030432
0.0022
127.0.0.1 - - [17/Aug/2010 11:09:32] "GET /one.mp3 HTTP/1.1" 200 4030432
0.0012
127.0.0.1 - - [17/Aug/2010 11:09:32] "GET /one.mp3 HTTP/1.1" 200 4030432
0.0010
请注意,请求是针对“GET /one.mp3”而不是“GET /files/one.mp3”,因为我的瘦Web服务器运行的是/files前缀。
在OS X Chrome中打开相同的HTML文件时,我看到了/one.mp3的2个GET请求。
在OS X Opera中打开相同的HTML文件时,我看到了/one.mp3的1 GET请求。
单个文件的多个GET请求的原因是什么?我服务器上的带宽是有限的,我以75KB / s的速度连接(这就是HTTP连接,而不是用户)。我担心的是,如果Safari正在建立3个HTTP连接来下载(流)单个mp3文件,它将减少我的服务器可以处理的并发用户数。
这是我应该在性能/带宽方面担心的吗?此外,我很好奇为什么某些浏览器会对同一个文件发出多个请求,而其他浏览器则没有。
答案 0 :(得分:7)
Safari是否可能会提取其他请求以获取元数据?尝试使用preload属性的不同值来查看它是否有任何区别:
有关此属性的完整说明,请参阅http://dev.w3.org/html5/spec/Overview.html#attr-media-preload。
答案 1 :(得分:7)
对于Firefox,有三个音频请求。这是为了支持播放区域和寻找尚未下载的媒体文件。它本质上是下载文件并在三个块中确定它的持续时间。当此行为为reported to Mozilla as a bug时,会给出以下说明:
虽然此解释仅适用于Firefox,但您可以假设webkit浏览器也使用类似的方法。
我认为你不应该担心这会影响并发用户的数量。如果您的服务器日志显示时间戳(以毫秒为单位),您将看到三个请求连续触发,并且在发出后续请求之前取消每个请求。