comprensione e superamento del problema di prestazioni SSL

0

Ci sono molti grandi articoli che spiegano come SSL/TLS funziona su questo sito, ma vorrei introdurre il problema delle prestazioni. Il fatto è che sto scontando i miei contenuti web su HTTPS e l'handshake SSL richiede molto tempo.

Per quanto comprendo al momento la connessione con HTTPS viene creata come segue:

  • Stretta di mano TCP
  • handshake SSL
  • Dati HTTP

Ora, considerando che non posso usare l'intestazione keep-alive in HTTP , vuol dire che ad ogni richiesta vengono attivati tutti e 3 i punti? I miei test empirici mostrano che la parte di handshake SSL che è extra rispetto a HTTP richiede circa 200-300 ms. Per caricare la pagina principale l'app sta facendo più di 10 richieste, quindi ciò significherebbe 200 * 10 = 2 secondi, giusto? Quello è troppo.

Quindi la domanda è: come posso ottimizzare quelle routine? Inoltre, come vengono distribuite le prestazioni tra server e client durante l'handshake SSL? Sembra che il server debba fare molto più calcoli, è corretto?

    
posta Erki M. 09.03.2014 - 02:10
fonte

2 risposte

2

Quando il tuo sito web fa riferimento a 10 file esterni, questi non verranno caricati uno dopo l'altro. Il browser Web degli utenti li richiederà tutti nello stesso momento e li caricherà in parallelo. Ciò significa che il tempo totale è di 200ms per caricare il file HTML e altri 200ms per il caricamento di tutte le immagini, script, fogli di stile, ecc. Menzionati in esso.

La RFC 2616 afferma che i browser web possono solo aprire due connessioni a ciascun server contemporaneamente, ma al giorno d'oggi tutti i principali browser ignorano questo e consentono molte più connessioni parallele (il numero varia dal browser al browser e spesso configurabile dall'utente).

    
risposta data 09.03.2014 - 04:42
fonte
1

Quindi è necessario utilizzare SSL che aggiunge un notevole overhead alla configurazione della connessione, ma non è consentito utilizzare la connessione persistente (ad esempio keep-alive) che renderebbe tale overhead meno rilevante perché si fanno più richieste all'interno della stessa connessione. Questa restrizione mi sembra stupida.

Hai ancora alcune opzioni per velocizzare le cose:

  • Riutilizzo della sessione SSL, che riduce il tempo o l'handshake SSL su connessioni ripetute allo stesso server.
  • Fai meno richieste, ad es. unire più script o stili inclusi in un file o servirli in linea all'interno dell'HTML. Utilizza gli URL dei dati per le immagini di piccole dimensioni, ecc.
  • Diffondi il carico sulle connessioni parallele (vedi altre risposte per i limiti di questo approccio).
risposta data 09.03.2014 - 08:57
fonte

Leggi altre domande sui tag