+39 328 4891193
[email protected]
  • Home
  • Chi Sono
  • Servizi
  • Blog
  • Contatti

HTTP – passato, presente e futuro

4 anni fa
SystemIO - Andrea Scorza
Coding, Geek, Network, Server, Tricks, Unix, Windows

Capita spesso che ci siano cose ben progettate, fatte per durare.
Direi che il protocollo HTTP è uno di questi

Posizionato al livello 7 dello stack OSI nasce negli anni 90 (1989 prima versione non pubblica) con la versione 1.0.

Nel 1997 e 1999 il protocollo viene aggiornato alla versione HTTP 1.1 , e poi di fatto lo abbiamo iper-sfruttato  fino  a (quasi) oggi.

per 15 anni è andato bene, ce lo siamo fatti andare bene, ma qualcuno che sul protocollo HTTP basava il proprio business , Google, decise di rivedere i limiti di questo “vecchietto”.

In effetti i limiti c’erano, ed erano emersi per lo più grazie ai nuovi contenuti, ai nuovi dispositivi, ai nuovi servizi, alla richiesta di velocità e latenza bassi.

Basti pensare che ogni oggetto di una pagina web (immagini, testo, stili, codice client) equivale ad una connessione HTTP (->e quindi una connessione TCP completa) , questo implica:

  • overehead client/server per informazioni ridondanti ad ogni connessione
  • impossibilità di comprimere gli header
  • raggiungimento di limiti sul numero di connessioni contemporanee client/server , tipicamente 10, l’undicesima aspetta…
  • le richieste (e le risposte) sono sequenziali e senza possibilità di prioritizzazione
  • il testo viene trasferito riga per riga
  • comunicazione in un senso solo (no push)

Naturalmente si è cercato di aggirare questi limiti senza inventare un nuovo modo di comunicare tra client e server, per esempio:

  • inlining / minify / oneliner
  • embedding
  • multiple domains (images. , cms. ,static. ,www.)
  • Google Pagespeed
  • gzip & caching
  • CDN

… ma forse andava riscritto il protocollo.

  • Nel 2009 Google inizia lo sviluppo di SPDY un protocollo per aggirare i limiti imposti da HTTP 1.0 e HTTP 1.1
  • Nel 2011 tutti i servizi Google usavano già SPDY
  • Nel 2012 era possibile installarlo autonomamente su qualsiasi webserver Apache HTTP Server e nginx
  • Luglio 2012 il codice di SPDY viene donato per farlo evolvere e farlo diventare di fatto lo standard HTTP/2 (httpbis)
  • E’ diventato standard a metà del 2015 (rfc7540)
  • Oggi praticamente tutti i browser supportano SPDY 3.1(+) e HTTP2
  • A fine 2018 si parla già di HTTP/3 (HTTP-Over-Quic)  ma questa è un’altra storia…

Ma vediamo un pò nel dettaglio cosa cambia:

Stream, messaggi, frame

  •  Il flusso(stream) è un canale virtuale all’interno di un collegamento, che porta messaggi bidirezionali. Ogni flusso ha un identificatore unico intero (1, 2, …, N)
  •  Il messaggio è un messaggio HTTP logico, come una richiesta o una risposta, consiste di uno o più frame
  •  Il frame è la più piccola unità di comunicazione che trasporta un tipo specifico di dati, HTTP headers, payload, e così via

HTTPS
obbligatorio

01010101010111110101010110…
E’ completamente binario! (base64)

1 sito -> 1 connessione -> migliaia di oggetti
HTTP/2 introduce il multiplexing, che permette al collegamento TCP/IP di richiedere e ricevere più risorse, intrecciate.

Le richieste non saranno piu in linea e quindi non si bloccheranno una con l’altra…., quindi non c’è bisogno di più connessioni TCP su più nomi di dominio. (images.sito.it, css.sito.it, cms.sito.it….)

Header compressi (HPACK)
cookies e http header compressi!
meno traffico , meno overhead, più velocità!

PUSH!
immaginate nella prima visita di un browser (www.sito.it) di poter fare push di alcuni contenuti verso il client prima che il contenuto della pagina sia caricato o addirittura di comandare il caricamento di alcuni contenuti senza una GET…
Il Server ha un maggior controllo sul client!

Priorità
il server può prioritizzare alcune richieste in modo che arrivino al client prima di altre

 

Che cosa invece non cambia?

STATI

200,301,403,404,500… rimangono tutti come in HTTP1.1

METODI

GET, POST, HEAD… rimangono tutti come in HTTP1.1

 

Questa immagine spiega abbastanza bene la differenza tra HTTP1.1 e HTTP/2

 

Ormai qualsiasi browser in circolazione da almeno 3 anni supporta HTTP/2, tuttavia c’è ancora poca diffusione e conoscenza del protocollo.

Lo state già usando, per esempio per leggere questo articolo!

 

SystemIO - Andrea Scorza
Articolo precedente
Il CAFE nascosto in qualsiasi classe Java
Articolo successivo
Building 20 MIT

Post correlati

Nessun risultato trovato.

Articoli recenti

  • STARLINK! Soluzione definitiva per il Digital Divide?
  • SystemIO RAV – Rack Alarm Visualizator
  • Ci sono molti modi…per scrivere un IP
  • ZipBomb – trappola per scanner
  • Dominio senza posta? evita che venga usato per inviare mail false

Archivi

  • Dicembre 2022
  • Novembre 2022
  • Febbraio 2021
  • Dicembre 2020
  • Ottobre 2020
  • Aprile 2020
  • Gennaio 2020
  • Agosto 2019
  • Febbraio 2019
  • Ottobre 2018
  • Giugno 2018
  • Gennaio 2018
  • Novembre 2017
  • Ottobre 2017
  • Settembre 2017

Categorie

  • Coding
  • Geek
  • Network
  • Server
  • Tricks
  • Unix
  • Windows

Meta

  • Accedi
  • Feed dei contenuti
  • Feed dei commenti
  • WordPress.org

Recent Posts

STARLINK! Soluzione definitiva per il Digital Divide?

SystemIO RAV – Rack Alarm Visualizator

Ci sono molti modi…per scrivere un IP

ZipBomb – trappola per scanner

Dominio senza posta? evita che venga usato per inviare mail false

Indirizzi casuali Wi-Fi, privacy ed effetti collaterali…grattacapi (per network admins)

Dove mi porterà il prossimo click ?

Italy Welcomes AWS!

Cybersecurity e vita reale

Animali e software…

Trovare connessioni e processi (Win)

Categorie

  • Coding (6)
  • Geek (18)
  • Network (8)
  • Server (5)
  • Tricks (14)
  • Unix (7)
  • Windows (6)

Tag

aws cloud coding computer vision datacenter digital divide dns fun geek ip java logos mac Milan Milano monitoring network privacy prtg rack random recensione region reputation security server shortner spacex spam spoof starlink sw ubiquiti unifi unix wi-fi wifi

© SystemIO di Andrea Scorza
P.IVA: IT02691970186 – CF: SCRNDR82A05F839M – REA: PV-294258
Privacy Policy/Cookie Policy