Как очистить HTTP-заголовки для вызовов AJAX GET? - PullRequest
1 голос
/ 02 марта 2009

Я разработал решение, которое использует вызов 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".

Ответы [ 3 ]

3 голосов
/ 02 марта 2009

Согласно спецификации WD

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

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

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

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

Меня это не удивит, учитывая, что некоторые люди ошибочно используют «Referer» [sic] в качестве механизма контроля доступа.

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

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

0 голосов
/ 02 марта 2009

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

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

Оба они, как правило, связаны с сервером XMPP на внутреннем сервере.

0 голосов
/ 02 марта 2009

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

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

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

...