移动Safari发出多个视频请求

| 我正在设计一个iPad的Web应用程序,该应用程序在移动Safari中使用HTML5。我正在通过运行.NET Framework v2.0的IIS 7上承载的ASP.NET .ashx文件手动传输文件。 基本代码部分如下所示:
// If we receive range header only transmit partial file
if (context.Request.Headers[\"Range\"] != null)
{
    var fi = new FileInfo(filePath);
    long fileSize = fi.Length;

    // Read start/end index
    string headerRange = context.Request.Headers[\"Range\"].Replace(\"bytes=\", \"\");
    string[] range = headerRange.Split(\'-\');
    int startIndex = Convert.ToInt32(range[0]);
    int endIndex = Convert.ToInt32(range[1]);

    // Add header Content-Range,Last-Modified
    context.Response.StatusCode = (int)HttpStatusCode.PartialContent;
    context.Response.AddHeader(HttpWorkerRequest.GetKnownResponseHeaderName(HttpWorkerRequest.HeaderContentRange), String.Format(\"bytes {0}-{1}/{2}\", startIndex, endIndex, fileSize));
    context.Response.AddHeader(HttpWorkerRequest.GetKnownResponseHeaderName(HttpWorkerRequest.HeaderLastModified), String.Format(\"{0:r}\", fi.CreationTime));

    long length = (endIndex - startIndex) + 1;
    context.Response.TransmitFile(filePath, startIndex, length);
}
else
    context.Response.TransmitFile(filePath);
现在,令我无休止的是要求Safari似乎使用的协议。从代理通过提琴手的请求,我得到aprox 2MB文件的以下内容。 注意:当请求通过IIS 7直接提供的mp4文件时,协议和请求量是相同的 首先,它请求2个字节,这允许它读取\'Content-Range \'标头。 现在,它请求全部内容(?) -- 再次执行步骤1和2.。 -- 现在只请求文件的一部分(???) 如果文件较大,则最后的步骤将更多。我已经测试了多达99个请求,其中每个请求包含均等分割的文件部分。这是有道理的,这是我所期望的。我无法理解的原因是为什么它在最后请求文件的不同部分之前对前2个字节发出2个初始请求,以及对整个文件发出2个请求。 正如我得出的结论,这取决于文件的长度以及用户是否观看足够长的时间,导致文件被下载2至3次。 任何人都可以理解这种行为,也许可以解释一下我可以做些什么来防止多次下载。谢谢。     
已邀请:
根据我对您的问题的评论,过去我也遇到过类似的问题。如果可以控制服务器(我没有),可以尝试做的一件事是禁用文件的gzip或身份编码。我认为,在第一次请求全部内容(列表中的第二个)时,它会要求使用gzip编码(压缩)的内容。也许您可以将IIS配置为不为gzip编码请求提供文件。 这是我对此主题的原始(未回答)问题: https://stackoverflow.com/questions/4855485/mpmovieplayercontroller-not-playing-full-length-mp3     

要回复问题请先登录注册