Pergunta

Eu desenvolvi uma solução que se baseia em uma chamada de AJAX para recuperar informações e atualizar a página do cliente a cada 10 segundos. Isso está funcionando bem, mas estou preocupado com a escalabilidade do código, dado o número eo comprimento de cabeçalhos sendo passado do cliente ao servidor e vice-versa. Eu removi um número de cabeçalhos redundantes no lado do servidor, a maioria relacionados com o ASP.NET, e agora eu estou tentando reduzir os cabeçalhos provenientes do cliente.

O navegador usado pela minha empresa é IE (versão 6, para ser atualizado para 7 breve). Esta é uma aproximação do meu código atual:

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

Eu li que é possível limpar alguns desses cabeçalhos, I não ter encontrado uma maneira de fazê-lo que as obras em IE6. Colocando-os como resultados nulos em uma exceção de incompatibilidade de tipo, então eu acabei apenas substituindo-os por '' por enquanto. Existe outra maneira de limpá-los ou um método alternativo de reduzir o enviado cabeçalhos HTTP?

Além disso, não parece haver nenhuma maneira de substituir ou encurtar cabeçalho 'Referente' em tudo.

Foi útil?

Solução

De acordo com a WD especificação

O método setRequestHeader () acrescenta um valor se o cabeçalho HTTP dado como argumento já faz parte da lista de cabeçalhos de solicitação.

Ou seja, você só pode adicionar cabeçalhos, e não substituí-los.

Esta não corresponde completamente o comportamento atual do navegador, mas pode ser o lugar onde os navegadores será dirigido, caso em que todos os esforços nesta frente são um desperdício de tempo a longo prazo. Em qualquer caso atual comportamento do navegador com a criação cabeçalhos é muito variada e geralmente não pode ser invocado.

Não parece haver nenhuma maneira de substituir ou encurtar cabeçalho 'Referente' em tudo.

Isso não me surpreende, dado que algumas pessoas usam erradamente ‘Referer’ [sic] como um mecanismo de controle de acesso.

Você poderia tentar certificar-se de que a URL da página atual não era excessivamente longo, mas para ser honesto tudo isto cheira a otimização prematura para mim. Faça o que fizer o seu pedido vai caber dentro de um pacote IP, por isso não há gonig ser uma grande diferença de desempenho visível.

Pode ser útil para Mibbit (como mencionado no blog é ligada) para tentar essas coisas, porque Mibbit atrai uma quantidade bastante impressionante de tráfego, mas para uma aplicação simples em toda a empresa eu não acho que o cross-browser -e-proxy-testando-carga:. relação do usuário final-benefício de brincar com os cabeçalhos vale a pena

Outras dicas

IE 6 e versões mais antigas usar o ActiveXObject criado a partir MSXML.XMLHTTP (derivado realmente IXMLHTTPRequest ), ao passo que o IE 7 e outros navegadores modernas, tais como o Mozilla usar um objecto intrínseca chamado XmlHttpRequest. Esta é provavelmente a razão pela qual não é possível definir os cabeçalhos solicitação para null para a implementação MSXML mas você pode para o objeto embutido.

Portanto, eu não acredito que haja qualquer forma de limpar coletivamente todos os cabeçalhos. O link para Mibbit que você apresentar só fornece uma função para definir todos os cabeçalhos para um nulo por um. Para cenários normais, a redução de cabeçalhos pode vir a ser um muito, muito insignificante de reduzir a carga de tráfego.

Dito isso, estou curioso para saber por que você está definindo os cabeçalhos de solicitação para "." em vez de um "" cadeia vazia.

Gostaria de renunciar este tipo de micro-otimizações e olhar para um modelo de envio vez. Por meio de um ponto de partida:

  • Flash pode criar soquetes persistentes, e intermediar os eventos em javascript.
  • Você poderia implementar bidirecional-córregos Ao longo Synchronous HTTP (BOSH). Consulte http://xmpp.org/extensions/xep-0124.html

Ambos são normalmente emparelhado com um servidor XMPP no back-end.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top