La differenza sta nel modo in cui HTTP / 1 e HTTP / 2 configurano i socket per la rete.
In HTTP / 1, il browser effettua una richiesta per un singolo asset e quindi attende il download di tale asset prima di effettuare la richiesta successiva. Questo è molto lento, quindi per ovviare a ciò, i browser hanno iniziato a multiplexare le loro richieste e fare 6-8 richieste alla volta, dividendo la larghezza di banda tra quelle 6-8 richieste.
In HTTP / 2, il browser apre un singolo socket, effettua tutte le richieste e quindi attende che tutti gli asset vengano trasmessi in streaming alla massima larghezza di banda disponibile.
Il motivo per cui dovresti vedere un TTFB elevato è perché in HTTP / 1, ogni richiesta è un socket separato, ma in HTTP / 2, tutte le richieste vengono scaricate attraverso il singolo flusso. Potresti aver effettuato le richieste, ma devi attendere che il server risponda con tutti i dati richiesti.
In teoria, HTTP / 2 dovrebbe essere più veloce perché è più efficiente - non hai il sovraccarico di aprire un nuovo socket per ogni richiesta. Stai trasmettendo tutti i dati in streaming su una singola pipe di dati e puoi dare la priorità alle richieste in base al modo in cui la pagina deve essere caricata.
In pratica, ciò dipende dal fatto che il browser effettui correttamente le priorità e la rete che consenta la larghezza di banda completa per il singolo flusso di socket e non limiti artificialmente le richieste.
Inoltre, poiché hai dichiarato che stai eseguendo HTTP / 1 non crittografato e HTTP / 2 crittografato, la crittografia causerà un sovraccarico aggiuntivo e una perdita di prestazioni. Potresti provare a fare HTTP / 1 crittografato per un confronto migliore.