La negoziazione del protocollo SPDY si verifica durante l'iniziale handshake TLS.
Attualmente esistono due modi per negoziare il protocollo: il precedente è denominato NPN (http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-04). Nel messaggio TLS ClientHello il client invia l'estensione NPN con ID 0x3374. Il server risponde con un messaggio ServerHello TLS che contiene anche l'elenco di protocolli supportati dal server anche in un'estensione NPN. Il client sceglie quindi il protocollo e invia la sua scelta, crittografata, al server.
Il nuovo metodo è stato progettato per HTTP 2.0 e si chiama ALPN (http://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg-05). Il messaggio TLS ClientHello contiene l'estensione ALPN con ID 0x10. Il client, questa volta, invia l'elenco dei protocolli supportati e il server risponde con un messaggio ServerHello TLS che contiene il protocollo scelto dal server, anche in un'estensione ALPN.
In entrambe le estensioni NPN e ALPN l'elenco di protocolli viene inviato come stringhe come http/1.1
o spdy/3
.
Una volta che il protocollo è stato scelto, l'handshake TLS continua e quindi entrambe le parti inizieranno a parlare immediatamente il protocollo che hanno scelto.
L'unico modo per essere a conoscenza della negoziazione del protocollo è quindi utilizzare TLS e disporre di un client che esponga le estensioni di negoziazione del protocollo. Ogni client lo fa in un modo specifico, ma per quanto ne so non esiste ancora il supporto per gli script di bash.
HAProxy, ad esempio, supporta sia NPN che ALPN (http://cbonte.github.io/haproxy-dconv/configuration-1.5.html) e Jetty 9.2 ha anche il supporto per NPN e ALPN (sia per client sia per server).
Altri server come Nginx o Apache supportano NPN con patch per ALPN (poiché sarà comunque necessario da HTTP 2.0).
NPN alla fine svanirà; Google Adam Langley has stated che NPN sarà deprecato a favore di ALPN.
Avete intenzione di scrivere un programma per farlo o volete che questo programma sia scritto per voi? –
Speravo che ci fosse qualcosa di pronto là fuori che potrei usare in uno script bash. – Jim