Подтвердить что ты не робот

Mobile Safari делает несколько видео-запросов

Я разрабатываю веб-приложение для iPad, которое использует HTML5 в мобильном сафари. Я передаю файл вручную через файл ASP.NET.ashx, размещенный в IIS 7 с .NET Framework v2.0.

Существенный код выглядит частично следующим образом:

// 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);

Теперь то, что меня смущает, - это протоколы для запроса того, что сафари, кажется, используют. Из проксирования запросов через скрипач я получаю следующее для aprox 2MB файла.

Fiddler requests

ПРИМЕЧАНИЕ. При запросе файла mp4, непосредственно обслуживаемого через IIS 7, протокол и количество запросов одинаковы

  • Сначала он запрашивает 2 байта, что позволяет читать заголовок Content-Range.
  • Теперь он запрашивает весь контент (?)
  • -
  • Далее делается шаг 1 и 2. снова (??)
  • -
  • Теперь он запрашивает только части файла (???)

Если файл больше, последние шаги будут намного больше. Я проверил до 99 запросов, где каждый запрос содержит часть файла, разделенную поровну. Это имеет смысл и это то, что можно было бы ожидать, я думаю. Я не могу понять, почему он делает 2 начальных запроса для первых 2 байтов, а также 2 запроса для всего файла, прежде чем он наконец запросит файл в разных частях.

Как я завершаю этот результат в файле, загружаемом между 2 и 3 раза, в зависимости от длины файла и того, насколько пользователь наблюдает за ним достаточно долго.

Может ли кто-нибудь понять это поведение и, возможно, объяснить, что я могу сделать, чтобы предотвратить множественные загрузки. Спасибо.

4b9b3361

Ответ 1

В моем комментарии к вашему вопросу у меня была аналогичная проблема в прошлом. Одна вещь, которую вы могли бы попробовать, если у вас есть контроль над сервером (я этого не сделал), - это отключить gzip или идентификационную кодировку файла. Я считаю, что в первом запросе на весь контент (# 2 в вашем списке) он запрашивает контент с кодировкой gzip (сжатый). Возможно, вы можете настроить IIS на то, чтобы не обслуживать файл для запроса gzip-encoding.

Вот мой оригинальный (без ответа) вопрос по теме:

https://stackoverflow.com/info/4855485/mpmovieplayercontroller-not-playing-full-length-mp3