Вопрос

Я разработал решение, которое использует вызов AJAX для извлечения информации и обновления клиентской страницы каждые 10 секунд.Это работает нормально, но меня беспокоит масштабируемость кода, учитывая количество и длину заголовков, передаваемых от клиента к серверу и обратно.Я удалил несколько избыточных заголовков на стороне сервера, в основном связанных с ASP.NET, и теперь я пытаюсь сократить количество заголовков, поступающих от клиента.

Браузер, используемый моей компанией, - IE (версия 6, скоро будет обновлена до 7).Это приблизительное описание моего текущего кода:

var xmlHTTP = new ActiveXObject('Microsoft.XMLHTTP');

xmlHTTP.onreadystatechange = function() {
    if ((xmlHTTP.readyState == 4) && (xmlHTTP.status == 200)) {
        myCallbackFunction(xmlHTTP);
    }
};

xmlHTTP.open('GET', 'myUrl.aspx');

try {
    xmlHTTP.setRequestHeader("User-Agent", ".");
    xmlHTTP.setRequestHeader("Accept", ".");
    xmlHTTP.setRequestHeader("Accept-Language", ".");
    xmlHTTP.setRequestHeader("Content-Type", ".");
} catch(e) {}

xmlHTTP.send();

Хотя Я читал что возможно очистить некоторые из этих заголовков, я не нашел способа сделать это, который работает в IE6.Установка для них значения null приводит к исключению несоответствия типов, поэтому в итоге я просто заменил их на '.' на данный момент.Есть ли другой способ их очистки или альтернативный метод сокращения отправленных HTTP-заголовков?

Кроме того, похоже, что вообще нет способа заменить или сократить заголовок "Referrer".

Это было полезно?

Решение

В соответствии с Спецификация WD

Метод setRequestHeader() добавляет значение, если HTTP-заголовок, указанный в качестве аргумента, уже является частью списка заголовков запроса.

То есть вы могли бы только добавлять заголовки, а не заменять их.

Это не совсем соответствует текущему поведению браузера, но, возможно, именно к этому будут стремиться браузеры, и в этом случае любые усилия на этом направлении в долгосрочной перспективе будут пустой тратой времени.В любом случае текущее поведение браузера при настройке заголовков очень разнообразно, и, как правило, на него нельзя положиться.

Кажется, вообще нет способа заменить или сократить заголовок "Referrer".

Это бы меня не удивило, учитывая, что некоторые люди ошибочно используют ‘Referer’ в качестве механизма контроля доступа.

Вы могли бы попытаться убедиться, что текущий URL страницы не был чрезмерно длинным, но, честно говоря, для меня все это попахивает преждевременной оптимизацией.Что бы вы ни делали, ваш запрос будет помещен в один IP-пакет, так что большой видимой разницы в производительности не будет.

Возможно, для Mibbit (как упомянуто в блоге, на который вы ссылаетесь) было бы целесообразно попробовать этот материал, потому что Mibbit привлекает довольно ошеломляющий объем трафика, но для простого приложения в масштабах всей компании я не думаю, что кроссбраузерное тестирование и прокси-тестирование: соотношение пользы для конечного пользователя от возни с заголовками того стоит.

Другие советы

IE 6 и более старые версии используют ActiveXObject, созданный из MSXML.XMLHTTP (фактически производный от IXMLHTTPRequest - запрос), тогда как IE 7 и другие современные браузеры, такие как Mozilla, используют встроенный объект под названием XmlHttpRequest.Вероятно, это причина, по которой вы не можете установить заголовки запроса равными null для реализации MSXML, но вы можете использовать и для встроенного объекта.

Поэтому я не верю, что существует какой-либо способ коллективно очистить все заголовки.Ссылка на Mibbit, которую вы представляете, предоставляет только функцию для установки всех заголовков в null один за другим.В обычных сценариях сокращение количества заголовков может оказаться очень и очень незначительным способом снижения нагрузки на трафик.

Тем не менее, мне любопытно узнать, почему вы устанавливаете заголовки запросов на "." вместо пустой строки "".

Я бы отказался от такого рода микрооптимизации и вместо этого изучил push-модель.В качестве отправной точки:

  • Flash может создавать постоянные сокеты и передавать события в javascript.
  • Вы могли бы реализовать двунаправленные потоки через синхронный HTTP (BOSH).Видишь http://xmpp.org/extensions/xep-0124.html

Оба они обычно сопряжены с XMPP-сервером на серверной части.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top