Получавате съобщение за грешка при сваляне на файлове, по-големи от 4GB чрез Internet Explorer?

   Пробвали ли сте с Internet Explorer 6/7 да свалите файл от Интернет, чиято големина превишава 4 GB? Ще останете неприятно изненадани ако се опитате да го направите. Резултатът е “The Page Cannot Be Displayed” 🙂

След като изследвах проблема малко по-обстойно стана ясно, че при IE6 максималният размер на сваляния файл е 2GB, а при IE7 – цели 4GB. От къде идва драмата?

Ще започна малко по-отдалече. Когато заявите даден файл браузерът Ви изпраща HTTP заявка към Web сървъра. Следва отговор, който съдържа информация за търсения ресурс, включително и неговата големина. Това става с помощта на т.нар. HTTP хедъри (headers), представени текстово като “параметър: стойност”. Големината на отговора/ресурса се обозначава с хедъра:

CONTENT-LENGTH: 3462578

където числовата стойност е в байтове. Ето тук е и проблема – в IE явно това е 32 битово число от тип INTEGER и се интерпретира при различните му версии както следва:

  • При IE6 “CONTENT-LENGTH” е 32 битово число СЪС ЗНАК (?!?), което прави 2^31=2147483648 т.е. можем да свалим файл с големина до 2 GB;
  • При IE7 пак имаме 32 битово число, но този път то е БЕЗ знак, което прави 2^32=4294967296 т.е. тук можем да сваляме два пъти по-големи файлове – до 4 GB.

Определено се вижда някаква еволюция, но нямам идея защо върви толкова мудно 🙂 Надявам се от Майкрософт да си поразмърдат малко програмистите, за да премахнат това смешно ограничение – във вид на пач или поне в новата 8-ма версия на браузера. До тогава, теглете по-големичките файлове с… горящата лисица  🙂 🙂 🙂

Друг е въпроса, че Internet Information Server (IIS), поне до версия 6.0, има същия проблем – при поискване на файл, по-голям от 2/4GB получавате съобщение за грешка 500 (Internal Server Error). Разбира се, има решение, но за него ще пиша в друга статия.

п.п. 1: Firefox има идентичен проблем във версиите, по-ниски от 2.0.0.11;

п.п. 2: Описаният ефект е тестван на 32 битова машина. Не съм тествал още поведението на IE 6/7 върху 64 битов компютър с 64 битова версия на Windows. Ако някой знае – да пише 😉

Още малко инфо:

Leave a Reply

Your email address will not be published. Required fields are marked *