Http2記錄

    最近在搞Http2,記錄下。

    Http協議有Http1.1和Http2,如果客戶端用Http1.1協議同Http2的服務溝通,是否會有問題呢? 

協議商討

    英文叫protocol  negotiation,客戶端和服務端使用APLN(Application Layer Protocol Negotiation mechanism)來協商使用哪個版本的Http,而APLN是基於TLS的,如下TLS處於TCP/UDP與Http之間

    客戶端使用APLN,在TLS的handshake的時候,帶上客戶端支持的Http版本,服務端收到後,選擇要使用的Http版本,之後服務端把要使用的Http版本返回給客戶端,也可能會返回空(如果不支持客戶端的Http版本),這個過程會在TLS的handshake中完成,不需要額外的Http協議拓展操作。

    正是由於有協議商討,所以開啓Http2的服務端,也會同時支持Http1.1的客戶端。

    由於Http2是基於TLS的,所以使用Http2的服務端,必須開啓Https,因爲TLS是用於Https加密傳輸的。

    JDK中是可以設置APLN的版本的,通過SSLParameters.setApplicationProtocols(),

TLS

    一般都會聽到SSL/TLS,這倆個是什麼關係呢?

    有興趣可以看oracle的TLS guide, SSL(Secure Socket Layer)在1994由NetScape開發的,之後成爲了標準,由IETF將SSL重命名爲TLS,TLS1.0,之後TLS升級,TLS1.2和TLS1.3,TLS1.3在安全性和性能提升上都比之前的好。

 

Reference

1.https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/tls.html

2.https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/alpn.html

 

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章