Domanda

Ho sviluppato una soluzione che si basa su una chiamata AJAX per recuperare informazioni e aggiornare la pagina client ogni 10 secondi. Funziona benissimo, ma sono preoccupato per la scalabilità del codice, dato il numero e la lunghezza delle intestazioni che vengono trasferite dal client al server e viceversa. Ho rimosso un numero di intestazioni ridondanti sul lato server, principalmente relative ad ASP.NET, e ora sto tentando di ridurre le intestazioni provenienti dal client.

Il browser utilizzato dalla mia azienda è IE (versione 6, che presto verrà aggiornata a 7). Questa è un'approssimazione del mio codice attuale:

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

Sebbene ho letto che è possibile cancellare alcune di queste intestazioni, I non ho trovato un modo per farlo che funzioni in IE6. Impostandoli su null si ottiene un'eccezione di tipo non corrispondente, quindi ho finito per sostituirli con '.' per ora. Esiste un altro modo per cancellarli o un metodo alternativo per ridurre le intestazioni HTTP inviate?

Inoltre, non sembra esserci alcun modo per sostituire o abbreviare l'intestazione "Referrer".

È stato utile?

Soluzione

Secondo le Specifiche WD

  

Il metodo setRequestHeader () aggiunge un valore se l'intestazione HTTP fornita come argomento fa già parte dell'elenco delle intestazioni della richiesta.

Cioè, puoi solo aggiungere intestazioni, non sostituirle.

Questo non corrisponde completamente al comportamento attuale del browser, ma può essere dove i browser saranno diretti, nel qual caso qualsiasi sforzo su questo fronte è una perdita di tempo a lungo termine. In ogni caso, l'attuale comportamento del browser con l'impostazione delle intestazioni è molto vario e generalmente non si può fare affidamento.

  

Sembra che non ci sia modo di sostituire o abbreviare affatto l'intestazione "Referrer".

Non mi sorprenderebbe, dato che alcune persone usano erroneamente & # 8216; Referer & # 8217; [sic] come meccanismo di controllo degli accessi.

Potresti provare ad assicurarti che l'URL della pagina corrente non sia eccessivamente lungo, ma a dire il vero tutto questo profuma di ottimizzazione prematura per me. Qualunque cosa tu faccia, la tua richiesta si adatterà all'interno di un pacchetto IP, quindi non ci sarà una grande differenza di prestazioni visibile.

Potrebbe essere utile per Mibbit (come menzionato nel blog che hai collegato) provare questa roba, perché Mibbit attira una quantità di traffico piuttosto sbalorditiva, ma per una semplice applicazione a livello aziendale non penso che il browser sia incrociato -and-proxy-testing-burden: ne vale la pena il rapporto beneficio-utente-beneficio di pasticciare con le intestazioni.

Altri suggerimenti

IE 6 e le versioni precedenti utilizzano ActiveXObject creato da MSXML.XMLHTTP (in realtà derivato da IXMLHTTPRequest ), mentre IE 7 e altri browser moderni come Mozilla usano un oggetto intrinseco chiamato XmlHttpRequest . Questo è probabilmente il motivo per cui non è possibile impostare le intestazioni Request su null per l'implementazione MSXML ma è possibile per l'oggetto incorporato.

Pertanto, non credo che esista un modo per cancellare collettivamente tutte le intestazioni. Il collegamento a Mibbit che presenti fornisce solo una funzione per impostare tutte le intestazioni su null una per una. Per scenari normali, ridurre le intestazioni può rivelarsi molto insignificante nel ridurre il carico di traffico.

Detto questo, sono curioso di sapere perché stai impostando le intestazioni della richiesta su ". " anziché su una stringa vuota " " .

Vorrei rinunciare a questo tipo di micro-ottimizzazioni e cercare invece un modello push. A titolo di punto di partenza:

Entrambi sono generalmente associati a un server XMPP sul back-end.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top