1. 程式人生 > >http2概述及Java9對其的支援

http2概述及Java9對其的支援

HTTP/2概述

HTTP/2意在減輕為維護HTTP/1.1複雜的底層架構而帶來的痛苦,以提高HTTP/1.1的效能。儘管HTTP/2仍然對HTTP/1.1向下相容,但它已不再是一個基於文字的協議。當客戶端通過HTTP/1.1請求建立一個連線時,所有請求將會被升級。從這一點上看,HTTP/2是用“二進位制資料幀”來說話的。

HTTP/2多路複用

HTTP/2多路複用使得一個單獨連線可以處理多個雙向流,因而客戶端可以通過一個單獨連線同時下載多個不同的資源。

HTTP/2頭部壓縮

HTTP 1.x協議族都是基於文字的,因此它們都相當冗長。有時候同一個HTTP頭的集合被一遍又一遍地進行交換。HTTP/2在整個請求過程中保持HTTP頭 表不變,因而大大降低了所需的頻寬。重要的是,這只是在去耦合,而不是經典意義上的壓縮。

HTTP/2推送

你可能會認為,HTTP/2推送是某種WebSocket的延續或升級,但實際上並不是這樣。WebSocket是客戶端和伺服器之間全雙工通訊的一種方法,一旦TCP連線被建立起來,伺服器就可以向客戶端傳送資料,而HTTP/2則解決的是與此不同的問題。

HTTP/2推送一種主動向客戶端傳送資源的技術,不必由客戶端發出請求。這實際上意味著,伺服器端知道,一個網站需要一些圖片,伺服器會在客戶端發出請求前的很長時間內,就一次性將這些圖片傳送到客戶端。

Java HTTP客戶端支援HTTP/2

根據維基百科關於HTTP/2的一個頁面的說法,在編寫的時候,以下Java客戶端庫已能夠建立HTTP/2連線。

Jetty

Netty

OkHttp

Vert.x

Firefly

但在這篇文章中,我們關注的是Java 9提供的HTTP/2支援。JEP 110 指定了具體要求,同時宣告該專案仍處於孵化狀態,這實際上意味著,它將不會取代Java 9中現有的UrlConnection API。 只有在Java 10釋出後,標準Java HTTP/2客戶端才會被移動到java.net包之下。但同時,它會處於jdk.incubtor名稱空間下。

JEP 110為新的、內建的HTTP/2客戶端提出了具體要求,因此它提供了一個高級別的、簡便易用的API和與現有選項相似(或更高)的效能。

第一步是匯入模組jdk.incubator.httpclient。

對於這個例子來說,我們要使用Undertow做為相容HTTP/2的web伺服器。它用來回應客戶端傳送的訊息。

新的API處處遵循生成器模式,而作為初始化HTTP請求入口的HttpClient也不例外。

以阻塞模式傳送請求

一旦我們有了一個HttpClient例項,就可以通過一個生成器建立更多的HttpClient例項。

請求被處理多久,send方法就會阻塞多久,但還是有一種方法來非同步交換HTTP訊息:以非阻塞模式傳送請求。

以非阻塞模式傳送請求

在下面的例子中,10個隨機整數被非同步傳送到我們的HTTP回顯伺服器,而當所有請求被初始化後,主執行緒等待它們完成。

處理push-promise架構

以上全部例子都可以是過時的HTTP/1.1請求。除了建立HttpClient以外,沒有看到任何HTTP/2所特有的東西。

這個客戶端API中與HTTP/2最有關聯的功能很可能是當HTTP/2推送被使用時它處理多個響應的方式。

結論

HTTP/2進行了一些必要改進,使舊的基於文字的協議變得煥然一新,並拋棄了令人討厭的HTTP/1.1中的很多工作流程,但是它並未解決所有已知的問題。

從Java 9方面來看,新的HTTP/2客戶端貌似不錯,但它的下一個版本才會是合格的產品。同時,如果需要HTTP/2支援的話,上面的庫都可以使用。

相關推薦

http2概述Java9支援

HTTP/2概述 HTTP/2意在減輕為維護HTTP/1.1複雜的底層架構而帶來的痛苦,以提高HTTP/1.1的效能。儘管HTTP/2仍然對HTTP/1.1向下相容,但它已不再是一個基於文字的協議。當客戶端通過HTTP/1.1請求建立一個連線時,所有請求將會被

iostat命令介紹C++返回值的提取處理

linux 運維 C++ 1、命令介紹常用的命令為 iostat -xkx參數表示返回全部參數k參數表示返回的數據單位為kbDevice: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz a

加密解密概述.NET中加密解密的支援(二)

.NET中加密解密的支援相信通過前面幾頁的敘述,大家已經明白了加密解密、數字簽名的基本原理,下面我們看一下在.NET中是如何來支援加密解密的。正如上面我們所進行的分類,.NET中也提供了兩組類用於加密解密,一組為對稱加密,一組為非對稱加密。這些類按照名稱還可以分為兩組,一組字

JDBC概述JDBC完成Oracle的增刪改查

dep 版本jar包 員工 rman 返回 exception ktr 接口 c代碼 什麽是JDBCJDBC(Java Data Base Connectivity,Java數據庫連接),是一種用於執行SQL語句的Java API,為多種關系數據庫提供統一訪問。它由一組用J

Wpf ViewModel中 ObservableCollection不支援從排程程式執行緒以外的執行緒 SourceCollection 進行的更改

Wpf中ViewModel類裡面經常會需要用到ObservableCollection來管理列表資料,在做非同步通訊的時候也會碰到“不支援從排程程式執行緒以外的執行緒對其 SourceCollection 進行的更改”這樣的異常,解決方法如下 1 ThreadPool.

如何用 Java PDF 檔案進行電子簽章(一)概述技術選型

參考: 一、 概述   印章是我國特有的歷史文化產物,古代主要用作身份憑證和行駛職權的工具。它的起源是由於社會生活的實際需要。早在商周時代,印章就已經產生。如今的印章已成為一種獨特的,融實用性和藝術性為一體的藝術瑰寶。傳統的印章容易被壞人、小人私刻;從而新聞鮮

table固定表頭行列,中行包含合併單元格(支援IE,但滑鼠滾動輪滾動效果不太友好)

PS:該程式碼用於學習,大部分不是原創,在他(她)人程式碼的基礎上修改成自己想實現的效果,來源不明,因此沒有加轉載連結,如有問題,先在這裡抱歉,請聯絡我刪除。 內容實現的效果與上一篇一樣,但是這個這個用了一點點js去實現IE沒有辦法相容的一些屬性,所以這個版本可以相容IE的高版本和低版本,測試用的版本時IE8

Kibana6.x.x 版本下啟動之後出現的一些警告資訊處理

問題1:  log   [08:59:02.297] [warning][security] Generating a random key for xpack.security.encryptionKey. To prevent sessions from being i

【九天教您南方cass 9.1】 08 繪製等高線處理

同學們大家好,歡迎收看由老王測量上班記出品的cass9.1視訊課程 我是本節課主講老師九天。 我們講課的教程附件也是共享的,請注意索取測量空間中。 【點選索取cass教程】5元立得 (給客服說暗號:“老王測量上班記”) 即可5元獲得教程全系列,不帶軟體安裝 這節課我們學習繪製等高線及對其處理

Flock官方宣佈,瀏覽器產品支援已經結束,請支持者使用Chrome或Firefox

原文如下: Flock Official End of Support Notice Support for Flock browsers will be discontinued as of Ap

利用ffmpeg修改MP4檔案頭資訊,使支援流式載入播放

最近在用AS3寫一個Flash的播放器,發現同樣都是H264編碼的mp4檔案,有的可以載入一點就開始播放,有的就必須全部載入完才能播。用本地播放器(potplayer,暴風影音等)開啟檢視,發現編碼什麼的也都是一樣的:左邊這個必須是全部載入完成才能播,右邊這個是一載入就能播。

kvm 虛擬化概述 virt-manager 安裝虛擬機

獨立 kvm linu ctu 才幹 鏡像文件 base sdn vt-d 一、KVM定義 基於內核的虛擬機(英語:Kernel-based Virtual Machine,簡稱KVM),是一種用於Linux內核中的虛擬化基礎設施。KVM眼下支持Int

有的系統區apk需要系統簽名,才能正常使用。

tput 簽名 系統簽名 pem nap ava idp uil 兩個文件 韓夢飛沙 韓亞飛 [email protected]/* */ yue31313 han_meng_fei_sha 向方案公司索要platform.x509.pem 和plat

轉:LLVM與Clang的概述關系

鏈接 att lang style clang 模塊化 這也 接下來 spa 轉:http://www.cnblogs.com/saintlas/p/5738739.html LLVM是構架編譯器(compiler)的框架系統,以C++編寫而成,用於優化以任意程序

python遞歸 面向象初識編程思想

類型 ren def flow 構建 全局 num arch 指向 遞歸 及 面向對象初識及編程思想 一、遞歸 1、定義:   在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。   (1)遞歸就是在過程或函數裏調用

顯然略微有靈力沖擊席卷而牧塵則是無奈的

baidu ccf beef mpm bdd f11 nbd html cdd http://baobao.baidu.com/article/1ed4aaf3a4265333ecd3f2e6df09a804.html?2017_10_04=0lbz=2n http://b

Spring Boot參考教程(一) SpringBoot概述Hello World

自動 構建項目 測試 run world tar 建模 持久化 開啟 前言 筆者閑來無事,寫此文檔,不足之處,海涵! 本文檔將詳細介紹Sping Boot特性,使用方法,及與第三方框架的集成應用。使開發人員可以快速的了解SpringBoot,熟練的使用S

HTML中fieldset標簽概述使用方法

深入 控件 實現 fields set標簽 感覺 醫院 表單 使用   一、懺悔 鞍山治療牛皮癬最好的醫院www.pfk0412.net   之前HTML沒有好好學,導致以前看到控件組樣式感覺很新奇,於是就用css實現了一個。但

HTML5中微數據概述在搜索引擎中的使用舉例

其中 data 標識 引擎 會有 信息 oca 評論 站長   做網站優化已經快一個月了,對於seo的一般技術也有了一些了解,前些天開始使用谷歌的網站站長工具,在裏面發現很多百度站長工具裏面不曾有的內容,其中“結構化數據”這一項是出現在 “優化”欄裏面,可想而知,這個結構化

取出一個圖層的symbol 在基礎上進行修改

earch con sender true search nbsp return eat cursor 取出一個圖層的symbol 在其基礎上對其進行修改 private void button1_Click(object sender, EventArgs e)