2009-09-05 27 views
7

Succede così che i miei dati attuali siano 1/4 della dimensione dell'intestazione della richiesta HTTP in byte.
C'è un modo per ridurre le dimensioni delle intestazioni HTTP o qualsiasi altro modo pertinente per gestire questa situazione?
Sto inviando dati da un dispositivo mobile su GPRS al server e non voglio essere gravato da enormi pacchetti di richieste che mangeranno nel mio $$ e anche in larghezza di banda.Comprimere le intestazioni Http

+0

+1 per una buona domanda, nell'impostazione che si descrive – KLE

+1

Si può estendere su "Sto inviando dati da un dispositivo mobile"? Sembra che tu stia utilizzando un'applicazione personalizzata (anche a causa dei tag * java * e * j2me *)? In tal caso, potresti riuscire a sbarazzarti delle intestazioni delle richieste come Accept- * e forse anche Host, se sai per certo che le tue applicazioni lato server non ne avranno bisogno. È possibile utilizzare l'User-Agent per inviare alcune informazioni sulla versione nel caso in cui il server abbia bisogno di maggiori dettagli nelle versioni future. Anche le intestazioni di risposta possono essere limitate. Quindi: ** sono sia il client che il server sotto il tuo controllo? ** E quanto sono importanti le specifiche HTTP per te? – Arjan

+0

@KLE, "nell'impostazione che descrivi" Mi dispiace non capisco questa affermazione? –

risposta

3

Non ho mai dovuto ottimizzare le prestazioni del sito tagliando le intestazioni. Detto questo, la maggior parte delle questioni hanno avuto a che fare con:

  1. Grande numero di indesiderati richieste GET. Ciò era spesso dovuto al fatto che il server non inviava le intestazioni di scadenza e di cache appropriate al client. A volte è un'applicazione mal scritta.
  2. Ampio numero di connessioni TCP aperte. Le prestazioni migliorano quando si è in grado di mantenere attiva la connessione e riutilizzarla per soddisfare più richieste. Non sono sicuro se il supporto dei client mobili sia attivo.
  3. Uso di compressione o la mancanza di esso. Se c'è qualcosa che può ridurre le spese, è l'uso della compressione. Tuttavia, non sono così sicuro che i client mobili possano supportare la compressione. A proposito, uno normalmente esegue la compressione per le risposte e non per le richieste (tutti i browser che conosco, non comprimono mai la richiesta anche se le specifiche HTTP lo consentono).

Se hai ancora bisogno di prestazioni migliori dopo # 3, l'applicazione richiede una qualche forma di revisione del design delle prestazioni.

5

Bene, che cosa occupa la maggior parte delle intestazioni? Ad esempio, Stack Overflow ha recentemente spostato la maggior parte del contenuto statico in un altro dominio, in modo che i cookie SO non vengano inclusi nelle richieste per il contenuto statico (che comunque non utilizzerebbe i cookie).

Se, tuttavia, la maggior parte delle intestazioni sono solo cose che il browser invia sempre (agente utente, ecc.), Non c'è molto che tu possa fare.

+0

Ho fatto una domanda qui (http://stackoverflow.com/questions/1378476/http-get-request-packet-size-in-bytes/1378496#1378496) riguardante la dimensione dell'intestazione della richiesta HTTP. E questo mi ha scioccato! I miei dati sarebbero sicuramente molto inferiori rispetto alle cifre menzionate in quel post –

+1

@ Kevin, non c'è nulla di scioccante lì. La maggior parte delle intestazioni delle richieste in tale estratto tcpdump sono richieste dal server, per decidere come deve essere preparata la risposta. –

+0

@Vineet, c'è qualche modo per uscire da questo? o il bagaglio a intestazione è inevitabile. –

2

Considero le intestazioni come "Architettura", ovvero: "il loro contenuto esatto varia da applicazione a applicazione in base ai requisiti".

Una volta ottenuto l'elenco corrente esatto, utilizzando i collegamenti forniti in this post,
, è possibile vedere quali sono necessari ed evitare di inviare gli altri.

Chissà se fa una differenza significativa, ma almeno puoi essere certo che hai fatto del tuo meglio su quell'argomento.

2

Bene, questo potrebbe risultare impopolare e/o non rispondere effettivamente alla tua domanda ma hai dato qualche pensiero alla granularità dei tuoi dati?

Dopo aver ridotto le intestazioni HTTP il più possibile, ho il sospetto che vorrete ancora ridurre il rapporto intestazione/dati. Il modo più ovvio per farlo è inviare/ricevere più di una voce di dati in ciascuna richiesta http.

Un ulteriore livello di logica sul lato client o lato server (o una modifica al modello dati) consente di richiedere dati in blocchi più grandi, in base alla misurazione di quali altri dati sono probabilmente necessari quando si richiede un singolo oggetto.

L'intero punto sarebbe trasferire più dati in ogni richiesta per ridurre il numero di richieste. Lo spreco di banda larga (e archiviazione client), proveniente dal trasferimento di dati di cui non avrete realmente bisogno, potrebbe risultare più accettabile rispetto all'impronta di intestazione HTTP.

+1

Non ho considerato la granularità dei dati grazie per averlo portato alla mia attenzione. Ma davvero un punto ben fatto! –

Problemi correlati