Я разрабатываю веб-приложение для 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);
ТеперьЧто меня смущает, так это протоколы для запросов, которые, похоже, использует сафари.При передаче запросов через fiddler я получаю следующее для файла aprox 2MB.
ПРИМЕЧАНИЕ. При запросе файла mp4, напрямую обслуживаемого через IIS 7, протоколи количество запросов одинаковы
- Сначала он запрашивает 2 байта, что позволяет ему прочитать заголовок «Content-Range».
- Теперь он запрашивает весь контент (?)
- -
- Продолжается выполнение шага 1. & 2. снова (??)
- -
- Теперь запрашиваются только частиfile (???)
Если размер файла больше, последние шаги будут намного больше.Я протестировал до 99 запросов, где каждый запрос содержит часть файла, разделенную поровну.Это имеет смысл, и это то, что можно ожидать, я думаю.Я не могу понять, почему он делает 2 начальных запроса для первых 2 байтов, а также 2 запроса для всего файла, прежде чем он, наконец, запрашивает файл в разных частях.
Когда я пришел к выводу, это приводит кфайл загружается 2-3 раза, в зависимости от длины файла и того, просматривает ли пользователь его достаточно долго.
Может кто-нибудь разобраться в этом поведении и, возможно, объяснить, что я могу сделать, чтобы предотвратить многократную загрузку.Спасибо.