锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一区免费视频,91国语精品自产拍,国产一区二区不卡视频http://blogjava.net/jiangshachina/category/55120.htmla cup of Java, cheers!zh-cnSat, 15 Oct 2016 06:28:07 GMTSat, 15 Oct 2016 06:28:07 GMT60鎺㈢儲(chǔ)HTTP/2: 嫻佺殑鐘舵€?鍘?http://www.aygfsteel.com/jiangshachina/archive/2016/10/08/431871.htmlJohn JiangJohn JiangSat, 08 Oct 2016 13:17:00 GMThttp://www.aygfsteel.com/jiangshachina/archive/2016/10/08/431871.htmlhttp://www.aygfsteel.com/jiangshachina/comments/431871.htmlhttp://www.aygfsteel.com/jiangshachina/archive/2016/10/08/431871.html#Feedback0http://www.aygfsteel.com/jiangshachina/comments/commentRss/431871.htmlhttp://www.aygfsteel.com/jiangshachina/services/trackbacks/431871.html
鎺㈢儲(chǔ)HTTP/2: 嫻佺殑鐘舵€?/span>
鎺㈢儲(chǔ)HTTP/2緋誨垪鐨勭鍥涚瘒鏂囩珷錛岃В璇諱簡HTTP/2嫻佺殑鐘舵€侊紝浠ュ強(qiáng)鐘舵€佷箣闂寸殑杞寲銆?2016.10.09鏈€鍚庢洿鏂?

1. 姒傝堪
    HTTP/2鐨勬祦(Stream)鏄湁鐘舵€佺殑銆傚綋瀹㈡埛绔垨鏈嶅姟鍣ㄧ鍦ㄤ嬌鐢ㄦ煇涓祦鍘誨彂閫佹垨鎺ユ敹鐗瑰畾甯?Frame)鎴栧寘鍚壒瀹氭爣絳?Flag)鐨勫撫鏃訛紝浼?xì)寮曡典h祦鐨勭姸鎬佺殑杞寲銆?a >HTTP 2鍗忚瀹氫箟鐨勬祦鐘舵€侊紝濡備笅鎵€紺猴細(xì)
                         +--------+
                 send PP |        | recv PP
                
,--------|  idle  |--------.
               /         |        |         \
              v          +--------+          v
       +----------+          |           +----------+
       |          |          | send H /  |          |
,------| reserved |          | recv H    | reserved |------.
|      | (local)  |          |           | (remote) |      |
|      +----------+          v           +----------+      |
|          |             +--------+             |          |
|          |     recv ES |        | send ES     |          |
|   send H |     ,-------|  open  |-------.     | recv H   |
|          |    /        |        |        \    |          |
|          v   v         +--------+         v   v          |
|      +----------+          |           +----------+      |
|      |   half   |          |           |   half   |      |
|      |  closed  |          | send R /  |  closed  |      |
|      | (remote) |          | recv R    | (local)  |      |
|      +----------+          |           +----------+      |
|           |                |                 |           |
|           | send ES /      |       recv ES / |           |
|           | send R /       v        send R / |           |
|           | recv R     +--------+   recv R   |           |
| send R /  `----------->|        |<-----------'  send R / |
| recv R                 | closed |               recv R   |
`----------------------->|        |<----------------------'
                         +--------+

   send:   endpoint sends this frame
   recv:   endpoint receives this frame

   H:  HEADERS frame (with implied CONTINUATIONs)
   PP: PUSH_PROMISE frame (with implied CONTINUATIONs)
   ES: END_STREAM flag
   R:  RST_STREAM frame
    鎬葷殑璇達(dá)紝HTTP/2涓烘祦鐨勬暣涓敓鍛藉懆鏈熷畾涔変簡7縐嶇姸鎬侊細(xì)idle錛宺eserved (local)錛宺eserved (remote)錛宱pen錛宧alf closed (local)錛宧alf closed (remote)鍜宑losed銆傚綋涓€绔彂閫佹垨鎺ユ敹澶撮儴鍧?鐢變竴涓狧EADERS/PUSH_PROMISE甯у拰绱ч殢瀹冪殑闆跺埌澶氫釜CONTINUATION甯х粍鎴愮殑闆嗗悎)鎴朢ST_STREAM甯э紝鎴栧寘鍚湁END_STREAM鏍囩鐨勫撫(HEADERS鍜孌ATA)涔嬪悗錛屽皢鏀瑰彉?gòu)箒鐨勭姸鎬併€?/span>
    嫻佺殑鐘舵€佸熀浜庡悇绔嚜宸辯殑瑙嗚銆傜敱浜庡撫鐨勪紶杈撲細(xì)鏈夌綉緇滃歡榪燂紝鍦ㄥ悓涓€鏃跺埢錛屼笉鍚岀璁や負(fù)鐨勬祦鐨勭姸鎬佸彲鑳芥槸涓嶅悓鐨勩€傛瘮濡傦紝褰撳彂閫佺浣跨敤涓€涓浜巌dle鐘舵€佺殑嫻佸彂閫佷竴涓笉鍖呭惈END_STREAM鏍囩鐨凥EADERS甯т箣鍚庝細(xì)绔嬪嵆璁や負(fù)璇ユ祦澶勪簬open鐘舵€侊紝浣嗘鏃舵帴鏀剁灝氭湭寰楀埌璇EADERS甯э紝鎵€浠ュ湪閭d竴鏃跺埢錛屾帴鏀剁渚濈劧璁や負(fù)璇ユ祦鐨勭姸鎬佹槸idle銆?/span>

2. idle
    鎵€鏈夌殑嫻佸湪鍒涘緩涔嬪垵閮藉浜巌dle鐘舵€併€傚浜巌dle鐘舵€佺殑嫻侊紝鍙厑璁歌鐢ㄤ簬鍙戦€丠EADERS甯э紝浣嗗彲浠ヨ鐢ㄤ簬鎺ユ敹HEADERS鍜孭RIORITY甯с€傚湪涓€绔嬌鐢ㄨ鐘舵€佺殑嫻佸彂閫佹垨鎺ユ敹HEADERS甯т箣鍚庯紝璇ョ浼?xì)璁や负姝箒鐨勭姸鎬佽漿鍙樹負(fù)open銆傛帴鏀禤RIORITY甯т笉浼?xì)鏀瑰彉娴佺殑鐘舵€併€?/span>
    涓€涓猧dle鐘舵€佺殑嫻佸彲琚彟涓€涓祦閫氳繃鍙戦€?鎺ユ敹PUSH_PROMISE甯т繚鐣欑潃錛屼嬌鍏跺湪灝嗘潵琚敤浜庢湇鍔″櫒绔帹閫併€傝淇濈暀鐨勬祦鐨勭姸鎬佸垯浠巌dle鍙樹負(fù)reserved (local/remote)銆?/span>

3. open
    澶勪簬open鐘舵€佺殑嫻佸彲琚敤浜庡彂閫佷換浣曠被鍨嬬殑甯с€備嬌鐢ㄨ鐘舵€佺殑嫻佸幓鍙戦€?鎺ユ敹鍖呭惈鏈塃ND_STREAM鏍囩鐨勫撫(HEADERS鍜孌ATA)涔嬪悗錛屼細(xì)浣胯嫻佺殑鐘舵€佸彉鎴恏alf closed (local/remote)銆備嬌鐢╫pen鐘舵€佺殑嫻佸彂閫佹垨鎺ユ敹RST_STREAM甯т箣鍚庯紝鍒欎細(xì)浣垮畠鐨勭姸鎬佽漿鍙樹負(fù)closed銆?/span>

4. half closed (local/remote)
    鐘舵€乭alf closed (local)涓巋alf closed (remote)涓殑local涓巖emote鐨勫尯鍒紝瀹屽叏鏄熀浜庡悇绔嚜宸辯殑瑙嗚銆傚浜庡悓涓€涓祦鐨勪袱绔紝濡傛灉涓€绔涓鴻繖涓祦鐨勭姸鎬佹槸half closed (local)錛岄偅涔堝彟涓€绔彧鑳借涓鴻繖涓祦鐨勭姸鎬佹槸half closed (remote)銆?/span>
    澶勪簬half closed (local)鐘舵€佺殑嫻佸彧鑳借鐢ㄤ簬鍙戦€乄INDOW_UPDATE錛孭RIORITY鍜孯ST_STREAM甯э紝浣嗗彲浠ヨ鐢ㄤ簬鎺ユ敹浠諱綍綾誨瀷鐨勫撫銆傜浉瀵瑰簲鍦幫紝澶勪簬half closed (remote)鐘舵€佺殑嫻佸彧鑳借鐢ㄤ簬鎺ユ敹WINDOW_UPDATE錛孭RIORITY鍜孯ST_STREAM甯э紝浣嗗彲浠ヨ鐢ㄤ簬鍙戦€佷換浣曠被鍨嬬殑甯с€?/span>

5. reserved (local/remote)
    涓巋alf closed (local/remote)鐘舵€佺浉浼鹼紝reserved (local/remote)鐘舵€佷腑鐨刲ocal涓巖emote涔熸槸鍩轟簬嫻佷袱绔悇鑷殑瑙嗚銆傛洿鍏蜂綋鐨勬槸錛屾湇鍔″櫒绔彂閫丳USH_PROMISE灝嗕竴涓猧dle鐘舵€佺殑嫻佷繚鐣欑潃浠ョ敤浜庢湭鏉ョ殑鎺ㄩ€侊紝騫惰榪欎釜琚繚鐣欑殑嫻佺殑鐘舵€佷負(fù)reserved (local)錛岃€屽鎴風(fēng)鍒欒榪欎釜嫻佺殑鐘舵€佷負(fù)reserved (remote)銆?/span>
    鏈嶅姟鍣ㄧ浣跨敤reserved (local)鐘舵€佺殑嫻佸悜瀹㈡埛绔彂閫丠EADERS甯с€傝HEADERS甯у氨鏄湇鍔″櫒绔帹閫?Server Push)涓鎺ㄩ€佺殑鍝嶅簲鐨勫ご閮ㄣ€傚綋鍙戦€佷簡HEADERS甯т箣鍚庯紝鏈嶅姟鍣ㄧ灝嗚璇ユ祦鐨勭姸鎬佷負(fù)half closed (remote)銆?/span>
鐩稿簲鍦幫紝瀹㈡埛绔€氳繃reserved (remote)鐘舵€佺殑嫻佹帴鏀跺埌鏈嶅姟鍣ㄧ鎺ㄩ€佺殑鍝嶅簲鐨勫ご閮紝鐒跺悗浼?xì)瑙嗚娴佺殑鐘舵€佷負(fù)half closed (local)銆?/span>
    鎵╁睍涓€涓嬶紝鏈嶅姟鍣ㄧ鎺ㄩ€佷腑琚繚鐣欑殑嫻佺殑鐘舵€佸湪鍙樹負(fù)half closed(local/remote)涔嬪悗鎵嶅彲鑳借鐢ㄤ簬鎺ユ敹/鍙戦€佽鎺ㄩ€佺殑鍝嶅簲鐨勪綋閮紝涔熷氨鏄疍ATA甯с€?/span>

6. closed
    褰撲竴绔嬌鐢ㄤ竴涓祦鍙戦€佹垨鎺ユ敹鍒癛ST_STREAM甯э紝鎴栭€氳繃鐘舵€佷負(fù)half closed (local/remote)鐨勬祦鎺ユ敹/鍙戦€佸寘鍚湁END_STREAM鏍囩鐨勫撫涔嬪悗錛岄兘浼?xì)瑙啒q欎釜嫻佺殑鐘舵€佷負(fù)closed銆?/span>
    closed鐘舵€侀紺虹潃嫻佺殑緇堢粨錛屽浜庤鐘舵€佺殑嫻佸皢鍙兘鍙戦€佹垨鎺ユ敹PRIORITY甯с€備絾鏈変竴涓壒渚嬨€傚嵆錛屽鏋滈€氳繃浣跨敤half closed (local/remote)鐘舵€佺殑嫻佸幓鎺ユ敹鎴栧彂閫佸寘鍚湁END_STREAM鏍囩鐨勫撫(HEADERS鎴朌ATA)錛屼互浣胯嫻佺殑鐘舵€佸彉涓篶losed錛岄偅涔堝湪姝や箣鍚庣殑杈冪煭鏃墮棿鍐咃紝浠嶇劧鍙互鎺ユ敹WINDOW_UPDATE鎴朢ST_STREAM甯с€?/span>


John Jiang 2016-10-08 21:17 鍙戣〃璇勮
]]>
鎺㈢儲(chǔ)HTTP/2: HPACK鍗忚綆€榪?鍘?http://www.aygfsteel.com/jiangshachina/archive/2016/09/24/431837.htmlJohn JiangJohn JiangSat, 24 Sep 2016 12:29:00 GMThttp://www.aygfsteel.com/jiangshachina/archive/2016/09/24/431837.htmlhttp://www.aygfsteel.com/jiangshachina/comments/431837.htmlhttp://www.aygfsteel.com/jiangshachina/archive/2016/09/24/431837.html#Feedback0http://www.aygfsteel.com/jiangshachina/comments/commentRss/431837.htmlhttp://www.aygfsteel.com/jiangshachina/services/trackbacks/431837.html
鎺㈢儲(chǔ)HTTP/2: HPACK鍗忚綆€榪?/span>
鎺㈢儲(chǔ)HTTP/2緋誨垪鐨勭涓€綃囨枃绔犲凡緇忎粙緇嶄簡HTTP 2鍗忚錛屾湰鏂囧垯灝嗙畝榪扮敤浜嶩TTP/2澶撮儴鍘嬬緝鐨?a >HPACK鍗忚銆?2016.10.01鏈€鍚庢洿鏂?

1. 鍩烘湰鍘熺悊
    HPACK澶撮儴鍘嬬緝鐨勫熀鏈師鐞嗗氨鏄嬌鐢ㄧ儲(chǔ)寮曡〃鍜?a >Huffman緙栫爜銆傚湪鍘嬬緝(緙栫爜)涓庤В鍘?瑙g爜)榪囩▼錛屽彲灝嗘寚瀹氱殑澶撮儴瀛楁(鍖呭惈瀛楁鍚嶄笌瀛楁鍊?瀛樺偍鍦ㄧ儲(chǔ)寮曡〃涓€傜儲(chǔ)寮曡〃涓殑姣忎竴涓潯鐩敱绱㈠紩(涓€涓暣鏁?錛屽瓧孌靛悕鍜屽瓧孌靛€肩粍鎴愩€傚浜庡瓨鍦ㄧ儲(chǔ)寮曡〃涓殑澶撮儴瀛楁錛屽湪緙栫爜鏃跺彲浠ヤ粎浣跨敤绱㈠紩浣滀負(fù)璇ュ瓧孌電殑浠h〃錛屽湪瑙g爜鏃墮€氳繃璇ョ儲(chǔ)寮曚粠琛ㄤ腑鏌ユ壘鍑哄搴旂殑瀛楁銆傚浜庡叾瀹冪殑瀛楃涓詫紝鍒欏彲浠ヤ嬌鐢℉uffman緙栫爜榪涜鍘嬬緝銆?br /> 1.1 绱㈠紩琛?/strong>
    绱㈠紩琛ㄧ敱闈欐€佽〃涓庡姩鎬佽〃緇勬垚銆傞潤鎬佽〃鐢盚PACK鍗忚棰勫畾涔夌殑61涓父鐢ㄧ殑澶撮儴瀛楁緇勬垚錛屽叾涓ぇ閮ㄥ垎瀛楁鐨勫€間負(fù)絀恒€傞潤鎬佽〃鏄彧璇葷殑錛屽叾涓殑鏉$洰鍙?qiáng)鍏朵綅缃潎涓嶅彲鏇存攺V€侶PACK鍗忚涓殑闄勫綍A鍒楀嚭浜嗗叏閮ㄧ殑闈欐€佽〃鏉$洰銆傚姩鎬佽〃涔熺敱涓€緋誨垪澶撮儴瀛楁緇勬垚錛屼絾鍏朵腑鐨勫厓绱犱笉鍥哄畾錛屽湪瀹為檯鎿嶄綔涓彲浠ユ彃鍏ユ柊鐨勬潯鐩紝涔熷厑璁稿垹闄ゅ凡鏈夌殑鏉$洰銆?br />     HPACK鍗忚瑕佹眰闈欐€佽〃涓庡姩鎬佽〃鍚堝茍鍦ㄥ悓涓€涓瓨鍌ㄧ┖闂翠腑錛屽叾涓潤鎬佽〃緗簬鍓嶉儴錛屽姩鎬佽〃绱ч殢鍏跺悗銆傞偅涔堝湪鏁翠釜绱㈠紩琛ㄧ┖闂翠腑錛屽姩鎬佽〃鐨勭涓€涓潯鐩殑绱㈠紩灝嗘槸62銆傚姩鎬佽〃鐨勭淮鎶ゅ師鍒欐槸鍏堣繘鍏堝嚭(FIFO)銆傚綋鍚戝姩鎬佽〃涓鍔犳潯鐩椂錛屽皢鎬繪槸浠庣62浣嶆彃鍏ワ紝鍘熸湁鐨勬潯鐩皢鍏ㄩ儴鍚戝彸縐誨姩涓€涓綅緗€傚綋浠庡姩鎬佽〃涓垹闄ゆ潯鐩椂錛屽皢鎬繪槸浠庢渶鍚庝竴浣嶈繘琛屽垹闄ゃ€?br />     铏借錛屽崗璁姹傚皢闈欐€佽〃涓庡姩鎬佽〃鍚堝茍鍦ㄤ竴璧鳳紝浣嗚繖鍙槸閫昏緫涓婄殑瑕佹眰銆傚彧瑕佸姩鎬佽〃鐨勭儲(chǔ)寮曟槸浠?2寮€濮嬶紝閭d箞鍚勪釜瀹炵幇鍙互鏍規(guī)嵁鑷繁鐨勫枩濂借嚜鐢卞湴浣跨敤瀛樺偍鏁版嵁緇撴瀯銆傛瘮濡傦紝鍙互灝嗛潤鎬佽〃鍗曠嫭鏀懼湪涓€涓笉鍙彉鐨勬暟緇勪腑錛岃€屽姩鎬佽〃鐢卞彟涓€涓摼琛ㄨ繘琛屽瓨鍌紝榪欐牱鍙兘浼?xì)渚夸簬鎻掑叆鍜屽垹闄ゆ潯鐩€傚彧涓嶈繃錛岃繖涓摼琛ㄤ腑鍏冪礌鐨勪笅鏍囦笌鍔ㄦ€佽〃涓潯鐩殑绱㈠紩涔嬮棿鐩稿樊62銆?br />     (鍔ㄦ€?绱㈠紩琛ㄤ腑鐨勬潯鐩厑璁?dāng)R噸澶嶃€?br /> 1.2 Huffman緙栫爜
    Huffman緙栫爜鏄竴縐嶇敤浜庢棤鎹熸暟鎹帇緙╃殑鏉冭礬寰勭紪鐮佺畻娉曘€傚湪浣跨敤璇ョ畻娉曟椂錛岄渶瑕佷竴寮犳墍鏈夎緙栫爜瀛楃鐨勬潈閲?鍑虹幇棰戠巼)浠g爜琛ㄣ€傚湪瀵瑰ぇ閲忕殑HTTP澶撮儴鏍鋒湰榪涜緇熻涔嬪悗錛屽緱鍑轟簡涓€浠介€傜敤浜嶩PACK鐨凥uffman浠g爜琛紝鐢卞崗璁腑鐨?a >闄勫綍B鍒楀嚭銆?br />
    蹇呴』娉ㄦ剰鐨勬槸錛孒PACK鍗忚騫朵笉瑕佹眰璇ュ崗璁殑瀹炵幇涓€瀹氳浣跨敤绱㈠紩琛紝鍗充究鏌愪釜瀛楁宸茬粡瀛樺湪浜庣儲(chǔ)寮曡〃涓簡銆傝€屼笖涔熶笉瑕佹眰涓€瀹氳瀵瑰瓧絎︿覆瀹炴柦Huffman鍘嬬緝銆備篃灝辨槸璇達(dá)紝鐞嗚涓婏紝鍦ㄧ紪鐮佹椂鍙互涓嶅澶撮儴瀛楁榪涜浠諱綍褰㈠紡鐨勫帇緙╋紝鑰屽彧闇€灝嗘墍鏈夌殑瀛楃杞寲鎴愬瓧鑺傚艦寮忋€?br />
2. 鍩烘湰鏁版嵁綾誨瀷琛ㄧず娉?/span>
    HPACK鍗忚浣跨敤鐨勫熀鏈暟鎹被鍨嬪彧鏈変袱縐嶏細(xì)鏁存暟錛涘瓧絎︿覆銆傝鍗忚浣跨敤鏁存暟鍘昏〃紺虹儲(chǔ)寮曞拰瀛楃涓茬殑闀垮害銆傚ご閮ㄥ瓧孌靛悕鍜屽€間腑鍑虹幇鐨勬暟瀛楋紝鍙細(xì)琚綋浣滃瓧絎︿覆榪涜澶勭悊銆?br /> 2.1 鏁存暟琛ㄧず娉?/strong>
    HPACK鍦ㄨ〃紺烘暣鏁版椂騫朵笉鏄妸瀹冪畝鍗曠殑杞崲鎴愪簩榪涘埗褰㈠紡銆傚洜涓篐PACK甯屾湜姣忎竴涓暣鏁扮殑琛ㄧず鑳藉浠庢煇涓?姣旂壒浣嶅瓧鑺?octet錛屼笅鏂囧皢鍏剁畝鍐欎負(fù)"瀛楄妭")涓殑浠諱綍涓€涓瘮鐗逛綅寮€濮嬶紝浣嗘€繪槸瑕佸湪鏌愪釜瀛楄妭鐨勬渶鍚庝竴涓瘮鐗逛綅緇撴潫銆傛瘮濡傝〃紺?27錛岃瀹冧粠瀛楄妭鐨勭涓€涓瘮鐗逛綅寮€濮嬪~鍏咃紝鑲畾浼?xì)鍦ㄦ渶鍚庝竴涓瘮鐗逛綅緇撴潫錛屽涓嬪浘鎵€紺猴細(xì)
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
+---+---+---+---+---+---+---+---+
濡傛灉絎竴涓瘮鐗逛綅琚叾瀹冨€煎崰鐢?鐢??"浠h〃)錛屽彧鑳戒粠絎簩涓瘮鐗逛綅寮€濮嬪~鍏呭憿錛熺粨鏋滀緷鐒跺彧闇€瑕佷竴涓瓧鑺傦紝濡備笅鎵€紺猴細(xì)
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| ? | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
+---+---+---+---+---+---+---+---+
浣嗗鏋滄槸浠庣涓変釜姣旂壒浣嶅紑濮嬪~鍏呭憿錛熻繖鏃朵細(xì)鍙戠幇涓€涓瓧鑺傚凡緇忎笉澶熶簡錛屽繀欏昏絎簩涓瓧鑺傘€備絾鑳藉惁琛ㄧず鎴愬涓嬪艦寮忓憿錛?br />
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| ? | ? | 1 | 1 | 1 | 1 | 1 | 1 |
+---+---+---+-------------------+
| 1 | ? | ? | ? | ? | ? | ? | ? |
+---+---+---+---+---+---+---+---+
榪欐樉鐒朵笉絎﹀悎HPACK鍗忚鐨勮姹傦紝鍥犱負(fù)瀹冨笇鏈涜兘澶熷湪鏌愪釜瀛楄妭鐨勬渶鍚庝竴涓瘮鐗逛綅緇撴潫榪欎釜琛ㄧず銆備負(fù)杈懼埌榪欎竴鐩殑錛孒PACK鍗忚璁捐鍑轟簡涓€縐嶅涓嬪浘鎵€紺虹殑琛ㄧず娉曪紝
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| ? | ? | 1 | 1   1   1   1   1 |
+---+---+---+-------------------+
| 1 |    Value-(2^N-1) LSB      |
+---+---------------------------+
               ...
+---+---------------------------+
| 0 |    Value-(2^N-1) MSB      |
+---+---------------------------+
絎竴涓瓧鑺備腑鑳藉琚敤鏉ュ~鍏呮暣鏁拌〃紺轟綅鐨勬瘮鐗逛綅鏁?涓婂浘涓殑涓?)琚О涓簆refix銆備笅闈㈡槸璇ヨ〃紺烘硶鐨凧ava璇█瀹炵幇錛?br />
public void encodeInteger(int value, int prefix) {
    
if (value >> prefix <= 0) {
        printBinary(value);
    } 
else {
        
int number = (1 << prefix) - 1;
        printBinary(number);
        
for (value -= number; value >= 128; value /= 128) {
            printBinary(value 
% 128 + 128);
        }
        printBinary(value);
    }
}

private void printBinary(int value) {
    System.out.println(String.format(
"%8s", Integer.toBinaryString(value)).replace(" ""0"));
}
鏍規(guī)嵁涓婅堪綆楁硶鍙煡錛屽綋prefix涓?鏃訛紝127鐨勮〃紺烘硶濡備笅鍥炬墍紺猴細(xì)
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| ? | ? | 1 | 1 | 1 | 1 | 1 | 1 |
+---+---+---+-------------------+
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+-------------------+
2.2 瀛楃涓茶〃紺烘硶
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| H |    String Length (7+)     |
+---+---------------------------+
|  String Data (Length octets)  |
+-------------------------------+
HPACK鍗忚浣跨敤涓婂浘灞曠ず鐨勮〃紺烘硶錛屽畠鐢變笁閮ㄥ垎緇勬垚錛?br /> [1]Huffman鏍囧織錛岃〃紺鴻瀛楃涓叉槸鍚︿負(fù)Huffman緙栫爜錛屽崰鐢ㄤ竴涓瘮鐗逛綅銆?br /> [2]瀛楃涓查暱搴︼紝涓€涓嬌鐢?.1鑺傛墍榪版柟娉曡〃紺虹殑鏁存暟錛屽叾涓璸refix涓?銆?br /> [3]瀛楃涓插€箋€傝嫢Huffman鏍囧織涓?錛岃鍊煎氨鏄師濮嬪瓧絎︿覆鐨勫瓧鑺傦紝鍚﹀垯璇ュ€兼槸緇廐uffman緙栫爜榪囩殑鏁版嵁銆傜敱浜庣粡Huffman緙栫爜榪囩殑鏁版嵁騫朵笉鎬繪槸鑳藉湪涓€涓瓧鑺傜殑鏈€鍚庝竴涓瘮鐗逛綅澶勭粨鏉燂紝鎵€浠ュ彲鑳戒細(xì)浣跨敤EOS(end-of-string)絎﹀彿榪涜濉厖銆?br />
3. 澶撮儴瀛楁琛ㄧず娉?/span>
    鏈変簡絎?鑺備粙緇嶇殑鍩烘湰鏁版嵁綾誨瀷鐨勮〃紺烘硶浣滀負(fù)鍩虹錛岀幇鍦ㄥ氨鍙互闃愯堪澶撮儴瀛楁鐨勮〃紺烘硶浜嗐€侶PACK鍗忚灝嗗瓧孌佃〃紺烘硶鍒嗘垚3縐嶇被鍨嬨€傚湪琛ㄧず娉曞紑澶存湁涓€涓垨鑻ュ共涓瘮鐗逛綅鐢ㄤ簬琛ㄧず綾誨瀷銆?br /> 3.1 宸插湪绱㈠紩琛ㄧ殑澶撮儴瀛楁
    綾誨瀷鏍囪瘑鍗犵敤1涓瘮鐗逛綅錛屽€間負(fù)1銆傜儲(chǔ)寮曚嬌鐢╬refix涓?鐨勬暣鏁拌〃紺烘硶銆傚湪瑙g爜鏃訛紝涓嶄細(xì)鏇存柊鍔ㄦ€佽〃銆?br />
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 1 |        Index (7+)         |
+---+---------------------------+
3.2 灝嗙疆鍏ョ儲(chǔ)寮曡〃鐨勫ご閮ㄥ瓧孌?/strong>
    綾誨瀷鏍囪瘑鍗犵敤2涓瘮鐗逛綅錛屽€間負(fù)01銆傚湪瑙g爜鏃訛紝浼?xì)鍚戝姩鎬佽〃鍐呮彃鍏ユ柊鏉$洰銆傝繖縐嶇被鍨嬪張琚垎鎴愪袱縐嶆儏鍐碉細(xì)
[1]澶撮儴瀛楁鍚嶅凡鍦ㄧ儲(chǔ)寮曡〃涓紝瀛楁鍚嶇儲(chǔ)寮曚嬌鐢╬refix涓?鐨勬暣鏁拌〃紺烘硶錛岃€屽瓧孌靛€間嬌鐢ㄥ瓧絎︿覆琛ㄧず娉曘€?br />
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 1 |      Index (6+)       |
+---+---+-----------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+
[2]澶撮儴瀛楁鍚嶄笉鍦ㄧ儲(chǔ)寮曡〃涓紝瀛楁鍚嶅拰瀛楁鍊煎潎浣跨敤瀛楃涓茶〃紺烘硶錛岃€岀涓€涓瓧鑺傜殑鍚?涓瘮鐗逛綅鍧囦嬌鐢?濉厖銆?br />
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 1 |           0           |
+---+---+-----------------------+
| H |     Name Length (7+)      |
+---+---------------------------+
|  Name String (Length octets)  |
+---+---------------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+
3.2 鏆備笉緗叆绱㈠紩琛ㄧ殑澶撮儴瀛楁
    綾誨瀷鏍囪瘑鍗犵敤4涓瘮鐗逛綅錛屽€間負(fù)0000銆傚湪瑙g爜鏃訛紝涓嶅悜鍔ㄦ€佽〃鍐呮彃鍏ユ柊鏉$洰銆傝繖縐嶇被鍨嬪張琚垎鎴愪袱縐嶆儏鍐碉細(xì)
[1]澶撮儴瀛楁鍚嶅凡鍦ㄧ儲(chǔ)寮曡〃涓紝瀛楁鍚嶇儲(chǔ)寮曚嬌鐢╬refix涓?鐨勬暣鏁拌〃紺烘硶錛岃€屽瓧孌靛€間嬌鐢ㄥ瓧絎︿覆琛ㄧず娉曘€?br />
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 |  Index (4+)   |
+---+---+-----------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+
[2]澶撮儴瀛楁鍚嶄笉鍦ㄧ儲(chǔ)寮曡〃涓紝瀛楁鍚嶅拰瀛楁鍊煎潎浣跨敤瀛楃涓茶〃紺烘硶錛岃€岀涓€涓瓧鑺傜殑鍚?涓瘮鐗逛綅鍧囦嬌鐢?濉厖銆?br />
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 |       0       |
+---+---+-----------------------+
| H |     Name Length (7+)      |
+---+---------------------------+
|  Name String (Length octets)  |
+---+---------------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+---+---------------------------+
3.3 姘鎬笉緗叆绱㈠紩琛ㄧ殑澶撮儴瀛楁
    綾誨瀷鏍囪瘑鍗犵敤4涓瘮鐗逛綅錛屽€間負(fù)0001銆傚湪瑙g爜鏃訛紝涓嶅悜鍔ㄦ€佽〃鍐呮彃鍏ユ柊鏉$洰銆傝繖縐嶇被鍨嬪張琚垎鎴愪袱縐嶆儏鍐碉細(xì)
[1]澶撮儴瀛楁鍚嶅凡鍦ㄧ儲(chǔ)寮曡〃涓紝瀛楁鍚嶇儲(chǔ)寮曚嬌鐢╬refix涓?鐨勬暣鏁拌〃紺烘硶錛岃€屽瓧孌靛€間嬌鐢ㄥ瓧絎︿覆琛ㄧず娉曘€?br />
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 1 |  Index (4+)   |
+---+---+-----------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+
[2]澶撮儴瀛楁鍚嶄笉鍦ㄧ儲(chǔ)寮曡〃涓紝瀛楁鍚嶅拰瀛楁鍊煎潎浣跨敤瀛楃涓茶〃紺烘硶錛岃€岀涓€涓瓧鑺傜殑鍚?涓瘮鐗逛綅鍧囦嬌鐢?濉厖銆?nbsp;  
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 1 |       0       |
+---+---+-----------------------+
| H |     Name Length (7+)      |
+---+---------------------------+
|  Name String (Length octets)  |
+---+---------------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+
    鍙互鍙戠幇錛?.2鑺備笌3.3鑺備腑鐨勮〃紺烘硶闄や簡綾誨瀷鏍囪瘑涓嶅悓涔嬪錛屽叾瀹冪殑閮藉畬鍏ㄧ浉鍚屻€傞偅涔堝畠浠殑鍖哄埆鏄粈涔堝憿錛熺被鍨?000琛ㄧず鐨勫瓧孌靛湪緇忚繃澶氭瑙g爜涓庣紪鐮佹椂錛屽彲鑳戒細(xì)琚煇涓腑浠嬭€呯疆鍏ョ儲(chǔ)寮曡〃涓€傝€岀被鍨?001琛ㄧず娉曞己璋冧簡璇ュ瓧孌墊棤璁哄湪浠諱綍鏃跺€欓兘涓嶅彲緗叆绱㈠紩琛ㄣ€傜被鍨?001鍙敤浜庤〃紺哄寘鍚湁鏁忔劅淇℃伅錛屽瀵嗙爜錛岀殑瀛楁鍊鹼紝浠ラ伩鍏嶅榪欎簺鍊艱繘琛屽帇緙╂椂浜х敓鐨勯闄┿€?br />
4. 鍔ㄦ€佽〃鐨勭鐞?/span>
    鍔ㄦ€佽〃涓殑鏉$洰琚涓烘槸鏈夊昂瀵哥殑錛屽叾璁$畻鍏紡涓猴細(xì)瀛楁鍚嶇殑瀛楄妭闀垮害+瀛楁鍊肩殑瀛楄妭闀垮害+32銆傚瓧孌靛悕/鍊肩殑闀垮害鏄寚瀹冧滑鐨勫師濮嬪瓧鑺傜殑闀垮害錛岃€岄潪緇忚繃Huffman緙栫爜鍚庣殑瀛楄妭鐨勯暱搴︺€?br />     鍔ㄦ€佽〃鐨勫昂瀵稿氨鏄叾涓墍鏈夋潯鐩殑灝哄涔嬪拰銆傚姩鎬佽〃鐨勬渶澶у昂瀵告槸鏈夐檺鐨勶紝鍙互閫氳繃涓嬮潰鐨勬暣鏁拌〃紺烘硶鏉ラ€氱煡鍗忚鐨勭幇瀹炲幓鏀瑰彉鍔ㄦ€佽〃鐨勬渶澶у昂瀵搞€?br />
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 1 |   Max size (5+)   |
+---+---------------------------+
    褰撴彃鍏ユ柊鐨勬潯鐩垨鏀瑰彉鍔ㄦ€佽〃鐨勬渶澶у昂瀵告椂錛屽彲鑳藉鑷村凡鏈夌殑涓€涓垨澶氫釜鏉$洰琚€愬嚭錛岀敋鑷蟲竻絀烘暣涓姩鎬佽〃銆傚皢鍔ㄦ€佽〃鐨勬渶澶у昂瀵歌緗負(fù)0鏄悎娉曠殑錛屽疄闄呬笂錛岃繖鏄竴縐嶅父鐢ㄧ殑娓呯┖鍔ㄦ€佽〃鐨勯€斿緞銆?/div>

]]>
鎺㈢儲(chǔ)HTTP/2: 鍒濊瘯HTTP/2(鍘?http://www.aygfsteel.com/jiangshachina/archive/2016/09/20/431814.htmlJohn JiangJohn JiangTue, 20 Sep 2016 08:42:00 GMThttp://www.aygfsteel.com/jiangshachina/archive/2016/09/20/431814.htmlhttp://www.aygfsteel.com/jiangshachina/comments/431814.htmlhttp://www.aygfsteel.com/jiangshachina/archive/2016/09/20/431814.html#Feedback1http://www.aygfsteel.com/jiangshachina/comments/commentRss/431814.htmlhttp://www.aygfsteel.com/jiangshachina/services/trackbacks/431814.html
鎺㈢儲(chǔ)HTTP/2: 鍒濊瘯HTTP/2
鐩墠鏀寔HTTP/2鐨勬湇鍔″櫒绔笌瀹㈡埛绔疄鐜板凡鏈変笉灝戯紝鎺㈢儲(chǔ)HTTP/2緋誨垪鐨勭浜岀瘒灝卞垎鍒互Jetty鍜宑url浣滀負(fù)鏈嶅姟鍣ㄧ鍜屽鎴風(fēng)錛屾弿榪頒簡HTTP/2嫻嬭瘯鐜鐨勬惌寤鴻繃紼嬨€傛湰鏂囪繕灝嗕嬌鐢ㄨ繖涓祴璇曠幆澧冨幓灞曠ずJetty鍦ㄥ疄鐜癏TTP/2鏃剁殑涓€涓眬闄愬拰涓€涓狟ug銆?2016.09.22鏈€鍚庢洿鏂?

1. HTTP/2鐨勫疄鐜?/span>
    鐩墠宸茬粡鏈変紬澶氱殑鏈嶅姟鍣ㄧ鍜屽鎴風(fēng)瀹炵幇浜嗗HTTP/2鐨勬敮鎸併€傚湪鏈嶅姟鍣ㄧ錛岃憲鍚嶇殑Apache httpd浠?.4.17鐗堬紝Nginx浠?.9.5鐗堬紝寮€濮嬫敮鎸丠TTP/2銆傚湪瀹㈡埛绔紝涓繪祦鐨勬祻瑙堝櫒錛屽Chrome錛孎ireFox鍜孖E錛岀殑鏈€鏂扮増鍧囨敮鎸丠TTP/2錛屼絾瀹冧滑閮藉彧鏀寔榪愯鍦═LS涓婄殑HTTP/2(鍗砲2)銆備嬌鐢↗ava璇█瀹炵幇鐨勶紝鍒欐湁Jetty鍜孨etty錛屽畠浠兘瀹炵幇浜嗘湇鍔″櫒绔拰瀹㈡埛绔€傛澶勬湁涓€浠紿TTP/2瀹炵幇鐨勫垪琛細(xì)https://github.com/http2/http2-spec/wiki/Implementations
    鍙﹀錛岃繕鏈変竴浜涘伐鍏鋒敮鎸佸HTTP/2鐨勫垎鏋愪笌璋冭瘯錛屽curl鍜學(xué)ireShark銆傝繖閲屼篃鏈変竴浠芥綾誨伐鍏風(fēng)殑鍒楄〃錛?a >https://github.com/http2/http2-spec/wiki/Tools

2. 鏈嶅姟鍣ㄧ
    浣滀負(fù)Java紼嬪簭鍛橈紝閫夌敤涓€嬈句嬌鐢↗ava璇█緙栧啓鐨勫紑婧怘TTP/2鏈嶅姟鍣ㄧ瀹炵幇浼間箮鏄緢鑷劧鐨勭粨鏋溿€傚疄闄呬笂錛屽湪鏃ュ悗鐨勭爺絀朵腑錛屾垜浠篃闇€瑕佹煡鐪嬫湇鍔″櫒绔殑婧愪唬鐮併€傝繖瀵逛簬娣卞叆鍦扮悊瑙TTP/2錛屽茍鍙戠幇瀹炵幇涓彲鑳界殑闂錛屽叿鏈夌幇瀹炴剰涔夈€?/span>
    鏈枃閫夋嫨Jetty鐨勬渶鏂扮増鏈?.3.11浣滀負(fù)鏈嶅姟鍣ㄧ銆侸etty鏄竴涓垚鐔熺殑Servlet瀹瑰櫒錛岃繖涓哄紑鍙慦eb搴旂敤紼嬪簭鎻愪緵浜嗘瀬澶т究鍒┿€傝€屾湰鏂囩1鑺備腑鎻愬埌鐨凬etty鏄竴涓紶杈撳眰妗嗘灦錛屽畠涓撴敞浜庣綉緇滅▼搴忋€傚彲浠ヤ嬌鐢∟etty鍘誨紑鍙戜竴涓猄ervlet瀹瑰櫒錛屼絾榪欐樉鐒朵笉濡傜洿鎺ヤ嬌鐢↗etty鏂逛究銆?/span>
    瀹夎鍜岄厤緗甁etty鏄竴浠跺緢瀹規(guī)槗鐨勪簨鎯咃紝鍏蜂綋榪囩▼濡備笅鎵€紺恒€?/span>
    鍋囪姝ゆ椂宸茬粡涓嬭澆騫惰В鍘嬪ソ浜咼etty 9.3.11鐨勫帇緙╂枃浠訛紝鐩綍鍚嶄負(fù)jetty-9.3.11銆傚湪鍏朵腑鍒涘緩涓€涓猼est-base瀛愮洰褰曪紝浣滀負(fù)灝嗚鍒涘緩鐨凧etty Base鐨勭洰褰曘€?/span>
$ cd jetty-9.3.11
$ mkdir test-base
$ cd test-base
鍦ㄥ垱寤築ase鏃訛紝鍔犲叆鏀寔http錛宧ttps錛宧ttp2(h2)錛宧ttp2c(h2c)鍜宒eploy鐨勬ā鍧椼€?/span>
$ java -jar ../start.jar --add-to-startd=http,https,http2,http2c,deploy

ALERT: There are enabled module(s) with licenses.
The following 1 module(s):
 + contains software not provided by the Eclipse Foundation!
 + contains software not covered by the Eclipse Public License!
 + has not been audited for compliance with its license

 Module: alpn
  + ALPN is a hosted at github under the GPL v2 with ClassPath Exception.
  + ALPN replaces/modifies OpenJDK classes in the java.sun.security.ssl package.
  + http://github.com/jetty-project/jetty-alpn
  + http://openjdk.java.net/legal/gplv2+ce.html

Proceed (y/N)? y
INFO: server          initialised (transitively) in ${jetty.base}\start.d\server.ini
INFO: http            initialised in ${jetty.base}\start.d\http.ini
INFO: ssl             initialised (transitively) in ${jetty.base}\start.d\ssl.ini
INFO: alpn            initialised (transitively) in ${jetty.base}\start.d\alpn.ini
INFO: http2c          initialised in ${jetty.base}\start.d\http2c.ini
INFO: https           initialised in ${jetty.base}\start.d\https.ini
INFO: deploy          initialised in ${jetty.base}\start.d\deploy.ini
INFO: http2           initialised in ${jetty.base}\start.d\http2.ini
DOWNLOAD: http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.5.v20150921/alpn-boot-8.1.5.v20150921.jar to ${jetty.base}\lib\alpn\alpn-boot-8.1.5.v20150921.jar
DOWNLOAD: https://raw.githubusercontent.com/eclipse/jetty.project/master/jetty-server/src/test/config/etc/keystore?id=master to ${jetty.base}\etc\keystore
MKDIR: ${jetty.base}\webapps
INFO: Base directory was modified
    娉ㄦ剰錛屽湪涓婅堪榪囩▼涓紝浼?xì)鏍规嵁褰撳墠鐜鍙橀噺涓娇鐢ㄧ殑Java鐗堟湰(姝ゅ涓?.8.0_60)鍘諱笅杞戒竴涓搴旂殑TLS-ALPN瀹炵幇jar鏂囦歡(姝ゅ涓篴lpn-boot-8.1.5.v20150921.jar)錛岃jar浼?xì)鐢ㄤ簬瀵筯2鐨勬敮鎸併€傚綋鍚姩Jetty鏃訛紝璇ar浼?xì)琚獼ava鐨凚ootstrap class loader鍔犺澆鍒扮被璺緞涓€?/span>
    鍒涘緩涓€涓渶綆€鍗曠殑Web搴旂敤錛屼嬌瀹冨湪鏍圭洰褰曚笅鍖呭惈涓€涓枃鏈枃浠秈ndex錛屽唴瀹逛負(fù)"HTTP/2 Test"銆?/span>鍐嶅寘鍚竴涓畝鍗曠殑Servlet錛屼唬鐮佸涓嬶細(xì)
package test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

    
private static final long serialVersionUID = 5222793251610509039L;

    @Override
    
public void doGet(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {
        response.getWriter().println("Test");
    }

    @Override
    
public void doPost(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {
        doGet(request, response);
    }
}
web.xml涓昏鏄畾涔変簡涓€涓猄ervlet錛屽叿浣撳唴瀹瑰涓嬶細(xì)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    metadata-complete="false" version="3.1">

    
<welcome-file-list>
        
<welcome-file>index</welcome-file>
    
</welcome-file-list>

    
<servlet>
        
<servlet-name>test</servlet-name>
        
<servlet-class>test.TestServlet</servlet-class>
    
</servlet>
    
<servlet-mapping>
        
<servlet-name>test</servlet-name>
        
<url-pattern>/test/*</url-pattern>
    
</servlet-mapping>
</web-app>
璇ュ簲鐢ㄧ殑閮ㄧ講璺緞涓簀etty-9.3.11/test-base/webapps/test.war銆傚湪璇AR鏂囦歡鎵€鍦ㄧ殑鐩綍涓嬶紝鍒涘緩涓€涓猼est.xml錛屽叾鍐呭濡備笅鎵€紺猴細(xì)
<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  
<Set name="contextPath">/</Set>
  
<Set name="war"><SystemProperty name="jetty.base" default="."/>/webapps/test.war</Set>
</Configure>
鍚姩Jetty鏈嶅姟鍣紝浣跨敤榛樿鐨凥TTP鍜孒TTPS绔彛錛屽垎鍒負(fù)8080鍜?443銆?/span>
$ java -jar ../start.jar
2016-09-15 21:15:51.190:INFO:oejs.Server:main: jetty-9.3.11.v20160721
2016-09-15 21:15:51.237:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///D:/http2/jetty/jetty-9.3.11/test-base/webapps/] at interval 1
2016-09-15 21:15:52.251:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /test.war, did not find org.eclipse.jetty.jsp.JettyJspServlet
2016-09-15 21:15:52.313:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@4520ebad{/test.war,file:///D:/http2/jetty/jetty-9.3.11/test-base/webapps/test.war/,AVAILABLE}{D:\http2\jetty\jetty-9.3.11\test-base\webapps\test.war}
2016-09-15 21:15:52.391:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
2016-09-15 21:15:52.391:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@711f39f9{/,file:///D:/http2/jetty/jetty-9.3.11/test-base/webapps/test.war/,AVAILABLE}{/test.war}
2016-09-15 21:15:52.532:INFO:oejs.AbstractConnector:main: Started ServerConnector@1b68ddbd{HTTP/1.1,[http/1.1, h2c, h2c-17, h2c-16, h2c-15, h2c-14]}{0.0.0.0:8080}
2016-09-15 21:15:52.735:INFO:oejus.SslContextFactory:main: x509=X509@e320068(jetty,h=[jetty.eclipse.org],w=[]) for SslContextFactory@1f57539(file:///D:/http2/jetty/jetty-9.3.11/test-base/etc/keystore,file:///D:/http2/jetty/jetty-9.3.11/test-base/etc/keystore)
2016-09-15 21:15:52.735:INFO:oejus.SslContextFactory:main: x509=X509@76f2b07d(mykey,h=[],w=[]) for SslContextFactory@1f57539(file:///D:/http2/jetty/jetty-9.3.11/test-base/etc/keystore,file:///D:/http2/jetty/jetty-9.3.11/test-base/etc/keystore)
2016-09-15 21:15:53.234:INFO:oejs.AbstractConnector:main: Started ServerConnector@4b168fa9{SSL,[ssl, alpn, h2, h2-17, h2-16, h2-15, h2-14, http/1.1]}{0.0.0.0:8443}
2016-09-15 21:15:53.249:INFO:oejs.Server:main: Started @3940ms
    鏍規(guī)嵁涓婅堪鏃ュ織鍙煡錛孞etty鍚敤浜哤eb搴旂敤test.war錛岃繕鍚姩浜嗕袱涓猄erverConnector錛屼竴涓敮鎸乭2c錛屽彟涓€涓敮鎸乭2銆傚€煎緱娉ㄦ剰鐨勬槸錛岃繖涓や釜ServerConnector榪樺垎鍒敮鎸乭2c-17, h2c-16, h2c-15, h2c-14鍜宧2-17, h2-16, h2-15, h2-14銆傝繖鏄洜涓猴紝HTTP/2鍦ㄦ寮忓彂甯冧箣鍓嶏紝鍏堝悗鍙戝竷浜?8涓崏妗堬紝鍏剁紪鍙蜂負(fù)00-17銆傛墍浠ワ紝榪欓噷鐨刪2c-XX鍜宧2-XX鎸囩殑灝辨槸絎琗X鍙瘋崏妗堛€?/span>

3. 瀹㈡埛绔?/span>
    鍏跺疄鏈€鏂逛究鐨勫鎴風(fēng)灝辨槸嫻忚鍣ㄤ簡銆傚彧瑕佷嬌鐢ㄧ殑FireFox鎴朇hrome鐗堟湰涓嶆槸澶€侊紝鑲畾閮藉凡緇忔敮鎸佷簡HTTP/2錛岃€屼笖榪欎竴鍔熻兘鏄粯璁ゆ墦寮€鐨勩€備篃灝辨槸璇達(dá)紝褰撲嬌鐢‵ireFox鍘昏闂墠闈㈡墍閮ㄧ講鐨刉eb搴旂敤鏃訛紝灝辨槸鍦ㄤ嬌鐢℉TTP/2錛屼絾浣犱笉浼?xì)鎰熻鍒皹q欑鍙樺寲銆備嬌鐢‵ireFox鎻愪緵鐨凞eveloper Tools涓殑Network宸ュ叿鏌ョ湅鏈嶅姟鍣ㄧ鐨勫搷搴旓紝浼?xì)鍙戠幇HTTP鐗堟湰涓篐TTP/2.0銆備絾姝ゅ甯屾湜榪欎釜瀹㈡埛绔兘澶熸彁渚涙洿涓轟赴瀵岀殑涓庢湇鍔″櫒绔繘琛屼氦浜掔殑鍔熻兘錛岄偅涔堟祻瑙堝櫒灝卞茍涓嶅悎閫備簡銆?br />    Jetty涔熷疄鐜頒簡鏀寔HTTP/2鐨勫鎴風(fēng)錛屼絾榪欎釜瀹㈡埛绔槸涓€涓狝PI錛岄渶瑕佺紪鍐欑▼搴忓幓璁塊棶HTTP/2鏈嶅姟鍣ㄧ銆傝€屼笖錛岀洰鍓嶈API鐨勮璁℃娊璞″眰嬈¤緝浣庯紝闇€瑕佸簲鐢ㄧ▼搴忓憳瀵笻TTP/2鍗忚錛屾瘮濡傚悇縐嶅撫錛屾湁杈冩繁鍏ョ殑浜嗚В銆傝繖瀵逛簬鍒濇秹HTTP/2鐨勫紑鍙戣€呮潵璇達(dá)紝鏄劇劧寰堜笉鍚堥€傘€傛湰鏂囬€夋嫨浣跨敤C璇█緙栧啓鐨勪竴涓伐鍏鳳紝鍏跺疄涔熸槸HTTP/2鐨勫鎴風(fēng)瀹炵幇涔嬩竴錛宑url銆?/span>
    curl鍦ㄦ敮鎸丠TTP/2鏃訛紝瀹為檯涓婃槸浣跨敤浜唍ghttp2鐨凜搴擄紝鎵€浠ラ渶瑕佸厛瀹夎nghttp2銆傚彟澶栵紝涓轟簡璁ヽurl鏀寔h2錛屽氨蹇呴』瑕佹湁TLS-ALPN鐨勬敮鎸併€傞偅涔堬紝涓€鑸湴榪橀渶瑕佸畨瑁匫penSSL 1.0.2+銆?/span>
    緗戠粶涓婂叧浜庡湪Linux涓嬪畨瑁呮敮鎸丠TTP/2鐨刢url鐨勮祫婧愭湁寰堝錛岃繃紼嬪茍涓嶉毦錛屼絾鏈夌偣鍎跨箒錛岃瀹夎鐨勪緷璧栨瘮杈冨錛屾湰鏂囧氨涓嶈禈榪頒簡銆傚鏋滄槸浣跨敤Windows錛岀瑪鑰呮瘮杈冩帹鑽愰€氳繃Cygwin鏉ュ畨瑁呭拰浣跨敤curl銆傚湪Windows涓畨瑁匔ygwin闈炲父綆€鍗曪紝鍦–ygwin涓墽琛屽悇縐嶅懡浠ゆ椂錛屾劅瑙変笂灝卞鍚屽湪浣跨敤Linux錛屽敖綆″畠騫朵笉鏄竴涓櫄鎷熸満銆傞€氳繃Cygwin瀹夎curl錛屽畠浼?xì)鑷姩鍦板畨瑁呮墍闇€鐨勫悇縐嶄緷璧栫▼搴忓拰搴撱€?/span>
    鍦ㄧ瑪鑰呯殑鏈哄櫒涓婏紝閫氳繃鏌ョ湅curl鐨勭増鏈細(xì)鍑虹幇濡備笅淇℃伅錛?/span>
curl 7.50.2 (x86_64-unknown-cygwin) libcurl/7.50.2 OpenSSL/1.0.2h zlib/1.2.8 libidn/1.29 libpsl/0.14.0 (+libidn/1.29) libssh2/1.7.0 nghttp2/1.14.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: Debug IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets Metalink PSL
鐢變笂鍙煡錛岀瑪鑰呬嬌鐢ㄧ殑curl鐗堟湰鏄?.50.2錛宯ghttp2鐗堟湰鏄?.14.0錛岃€孫penSSL鐗堟湰鏄?.0.2h銆?/span>

4. 絎竴嬈″皾璇?/span>
    鍦ㄧ涓€嬈″皾璇曚腑錛屽彧闇€瑕佺畝鍗曞湴璁塊棶絎?鑺備腑閮ㄧ講鐨刉eb搴旂敤涓殑闈欐€佹枃鏈枃浠秈ndex錛屼互鎰熷彈涓媓2c錛屽畬鏁村懡浠ゅ涓嬶細(xì)
$ curl -v --http2 http://localhost:8080/index
鍦ㄨ緭鍑轟腑鍖呭惈鏈夊涓嬬殑鍐呭錛?/span>
...
> GET /index HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.50.2
> Accept: */*
> Connection: Upgrade, HTTP2-Settings
> Upgrade: h2c
> HTTP2-Settings: AAMAAABkAAQAAP__
>
...
< HTTP/1.1 101 Switching Protocols
* Received 101
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
...
< HTTP/2 200
< server: Jetty(9.3.11.v20160721)
< last-modified: Wed, 14 Sep 2016 12:52:32 GMT
< content-length: 11
< accept-ranges: bytes
<
...
HTTP/2 Test
">"鏄鎴風(fēng)鍙戦€佺殑璇鋒眰錛?<"鏄湇鍔″櫒绔彂閫佺殑鍝嶅簲錛岃€?*"鏄痗url瀵瑰綋鍓嶈繃紼嬬殑璇存槑銆?/span>緇撳悎鏈郴鍒?a href="http://www.aygfsteel.com/jiangshachina/archive/2016/09/19/431811.html">絎竴綃囨枃绔?/a>涓墍綆€榪扮殑HTTP 2鍗忚錛屽彲浠ユ湁浠ヤ笅鐨勫熀鏈悊瑙c€?/span>
[1]瀹㈡埛绔彂璧蜂簡涓€涓狧TTP/1.1鐨勮姹傦紝鍏朵腑鎼哄甫鏈塙pgrade澶撮儴錛岃姹傛湇鍔″櫒绔崌綰у埌HTTP/2(h2c)銆?/span>
> GET /index HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.50.2
> Accept: */*
> Connection: Upgrade, HTTP2-Settings
> Upgrade: h2c
> HTTP2-Settings: AAMAAABkAAQAAP__
>
[2]鏈嶅姟鍣ㄧ鍚屾剰鍗囩駭錛岃繑鍥炲搷搴?101 Switching Protocols"錛岀劧鍚庡鎴風(fēng)鏀跺埌浜?01鍝嶅簲錛孒TTP/2榪炴帴榪涜紜銆?/span>
< HTTP/1.1 101 Switching Protocols
* Received 101
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
[3]鏈嶅姟鍣ㄧ鍝嶅簲鏈€緇堢粨鏋溿€傜姸鎬佽涓嚭鐜扮殑HTTP鐗堟湰涓篐TTP/2錛岀姸鎬佷唬鐮佷負(fù)200錛屼笖鍚庨潰娌℃湁璺熺潃"OK"銆傛渶鍚庤緭鍑轟簡index鏂囦歡鐨勫唴瀹?HTTP/2 Test"銆?/span>
< HTTP/2 200
< server: Jetty(9.3.11.v20160721)
< last-modified: Wed, 14 Sep 2016 12:52:32 GMT
< content-length: 11
< accept-ranges: bytes
<
...
HTTP/2 Test

5. 涓€涓眬闄?/span>
    榪欐錛屽湪鍙戣搗鐨勮姹備腑鍖呭惈浣撻儴錛屽懡浠ゅ涓嬶細(xì)
$ curl -v --http2 -d "body" http://localhost:8080/index
鍦ㄨ緭鍑轟腑鍖呭惈鏈夊涓嬬殑鍐呭錛?/span>
...
> POST /index HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.50.2
> Accept: */*
> Connection: Upgrade, HTTP2-Settings
> Upgrade: h2c
> HTTP2-Settings: AAMAAABkAAQAAP__
> Content-Length: 4
> Content-Type: application/x-www-form-urlencoded
>
...
< HTTP/1.1 200 OK
< Last-Modified: Wed, 14 Sep 2016 12:52:32 GMT
< Accept-Ranges: bytes
< Content-Length: 11
...
HTTP/2 Test
    鍜岀4鑺備腑鐨勮緭鍑鴻繘琛屾瘮杈冿紝浼?xì)鍙戠幇缂簽畱浜?101 Switching Protocols"閭d竴孌碉紝鑰屼笖鏈€緇堝搷搴旂姸鎬佽涓嚭鐜扮殑HTTP鐗堟湰鏄疕TTP/1.1銆傝繖灝辮鏄庢湇鍔″櫒绔笉鍚屾剰鍗囩駭錛屽悗闈㈢戶緇嬌鐢℉TTP/1.1銆傚垰鍒氶儴緗茬殑Jetty鏈仛浠諱綍鏀瑰彉鎬庝箞浼?xì)绐佺劧涓嶆敮鎸丠TTP/2浜嗗憿錛熸垨鑰呰繖鏄痗url鐨勯棶棰橈紵鍏跺疄錛?/span>榪欐槸鍥犱負(fù)Jetty鏈嶅姟鍣ㄧ鍦ㄥ疄鐜癶2c鏃朵笉鏀寔璇鋒眰涓寘鍚綋閮ㄣ€傚彟澶栵紝Apache httpd涔熸湁鍚屾牱鐨勯棶棰樸€傚鏋滄槸浣跨敤h2錛屽垯娌℃湁榪欎釜闄愬埗銆傝繖鑳屽悗鐨勫師鍥犺秴鍑轟簡鏈枃鐨勮寖鐣達(dá)紝涓嶄綔琛ㄨ堪銆?/span>

6. 涓€涓狟ug
    鍦ㄨ繖嬈″皾璇曚腑錛屾祴璇曚竴涓嬩袱绔100-continue鐨勬敮鎸併€傚鏋滆姹備腑浣跨敤浜嗗ご閮?Expect: 100-continue"錛岄偅涔堟甯稿湴璇ヨ姹傝鏈変綋閮ㄣ€備絾鐢變簬鍦ㄧ5鑺備腑浠嬬粛鐨勯棶棰橈紝姝ゆ椂涓嶈兘鍐嶄嬌鐢╤2c錛岃€屽彧鑳戒嬌鐢╤2銆傚彟澶栵紝榪欐涓嶈闂潤鎬佹枃浠訛紝鑰屾槸璁塊棶Servlet(姝ゅ涓?test)銆傚畬鏁村懡浠ゅ涓嬶細(xì)
$ curl -vk --http2 -H "Expect: 100-continue" -d "body" https://localhost:8443/test
鍦ㄨ緭鍑虹殑鏈€鍚庡嚭鐜頒簡濡備笅淇℃伅錛?/span>
curl: (92) HTTP/2 stream 1 was not closed cleanly: CANCEL (err 8)
榪欏叾瀹炴槸Jetty鐨勪竴涓?a >Bug錛屾鍦ㄥ紑鍙戜腑鐨?.3.12宸茬粡淇浜嗗畠銆?/span>

7. 灝忕粨
    HTTP/2渚濈劧綆楁槸鏂版疆鐨勬妧鏈紝瀵瑰悇瀹剁殑瀹炵幇錛屾棤璁烘槸鏈嶅姟鍣ㄧ錛屽鎴風(fēng)錛岃繕鏄垎鏋愬伐鍏鳳紝閮借鎸佹湁涓€浠芥€€鐤戞€佸害銆傝繖浜涘疄鐜板拰宸ュ叿閮芥槸紼嬪簭錛岄兘鏈夊彲鑳藉瓨鍦╞ug銆傝€屼笖鍗忚瀵硅澶氱粏鑺傛病鏈変綔鍑鴻瀹氾紝鍚勫閮戒細(xì)鍙戞尌鑷繁鐨勬兂鍍忓姏銆傛瘮濡傦紝Apache httpd鍜孞etty鍦ㄥ疄鐜版湇鍔″櫒绔帹閫佹椂錛屽叾鏂瑰紡灝變笉灝界浉鍚屻€?br />    鍦ㄥ紑鍙戣嚜宸辯殑HTTP/2瀹炵幇鎴栧簲鐢ㄧ殑鏃跺€欙紝闇€瑕佸悓鏃朵嬌鐢ㄥ凡鏈夌殑涓嶅悓鏈嶅姟鍣ㄧ鍜屽鎴風(fēng)鍘婚儴緗插濂楁祴璇曠幆澧冭繘琛屽姣斿垎鏋愩€?br />


]]>
鎺㈢儲(chǔ)HTTP/2: HTTP 2鍗忚綆€榪?鍘?http://www.aygfsteel.com/jiangshachina/archive/2016/09/19/431811.htmlJohn JiangJohn JiangMon, 19 Sep 2016 03:36:00 GMThttp://www.aygfsteel.com/jiangshachina/archive/2016/09/19/431811.htmlhttp://www.aygfsteel.com/jiangshachina/comments/431811.htmlhttp://www.aygfsteel.com/jiangshachina/archive/2016/09/19/431811.html#Feedback0http://www.aygfsteel.com/jiangshachina/comments/commentRss/431811.htmlhttp://www.aygfsteel.com/jiangshachina/services/trackbacks/431811.html
鎺㈢儲(chǔ)HTTP/2: HTTP/2鍗忚綆€榪?/span>
HTTP/2鐨勫崗璁寘鍚潃涓や釜RFC錛欻ypertext Transfer Protocol Version 2 (RFC7540)錛屽嵆HTTP/2錛汬PACK: Header Compression for HTTP/2 (RFC7541)錛屽嵆HPACK銆俁FC7540鎻忚堪浜咹TTP/2鐨勮涔夛紝RFC7541鍒欐弿榪頒簡鐢ㄤ簬HTTP/2鐨勫ご閮ㄥ帇緙╃殑鏍煎紡銆傛湰鏂囧彧娑夊強(qiáng)HTTP/2鍗忚錛屾湰緋誨垪鐨勫悗緇枃绔犲皢浼?xì)娑夊強(qiáng)HPACK鍗忚銆?2016.10.13鏈€鍚庢洿鏂?

1. HTTP/2瑕佽В鍐崇殑闂
     HTTP/1.0鍙厑璁稿湪涓€涓猅CP榪炴帴涓嚭鐜頒竴涓姹傘€傚悗鏉ョ殑HTTP/1.1铏界劧寮曞叆浜嗚姹傛祦姘寸嚎錛屼互鍏佽鍦ㄤ竴涓繛鎺ヤ腑鍙戦€佸涓姹傦紝浣嗚繖鍙槸閮ㄥ垎鍦拌В鍐充簡璇鋒眰騫跺彂鐨勯棶棰樸€傛湇鍔″櫒绔湪榪斿洖鍝嶅簲鏃訛紝榪樻槸蹇呴』瑕佹寜鐓у畠鎺ユ敹鍒扮殑璇鋒眰鐨勯『搴忚繘琛岃繑鍥炪€傚鏋滄帓鍦ㄥ墠闈㈢殑鍝嶅簲瑕佹秷鑰楄緝闀跨殑鏃墮棿錛岄偅渚濈劧浼?xì)瀵瑰悗闈㈢殑鍝嶅簲鐨勯€犳垚闃誨錛屼害鍗崇嚎澶撮樆濉?Head-of-line blocking)銆傛墍浠ワ紝瀹㈡埛绔繀欏昏浣跨敤澶氭潯榪炴帴鍘誨彂璧峰涓殑璇鋒眰浠ュ疄鐜板茍鍙戯紝騫惰繘鑰屽噺灝忓歡榪熴€傛洿澶х殑騫跺彂浼?xì)澧炲ぇ鏈嶅姟鍣ㄧ殑璐熻浇锛屼篃浼?xì)鍗犵敤鏇村ぇ鐨勭綉緇滃甫瀹姐€傚彟澶栵紝澶撮儴閫氬父浼?xì)鍖呭惈鏈夊ぇ閲忕殑淇℃伅锛屽cookie錛岃€岃繖涔熶細(xì)澧炲姞緗戠粶浼犺緭鐨勫紑閿€銆?/span>
     HTTP/2鍏佽鍦ㄥ悓涓€涓猅CP榪炴帴涓氦閿欏湴鍑虹幇澶氫釜璇鋒眰涓庡搷搴旓紝浜﹀嵆澶氬伐(Multiplex)銆傚悓鏃訛紝瀹冧嬌鐢ㄤ簡涓€涓珮鏁堢殑緙栫爜鏂規(guī)硶瀵瑰ご閮ㄨ繘琛屽帇緙┿€侶TTP/2榪樺厑璁稿璇鋒眰榪涜浼樺厛綰ф帓搴忥紝浠ヤ究璁╂洿涓洪噸瑕佺殑璇鋒眰寰椾互鏇村揩鐨勫畬鎴愶紝榪欎細(xì)榪涗竴姝ユ彁楂樻€ц兘銆侶TTP/2榪樻敼鍙樹簡鏈嶅姟鍣ㄧ鍙兘琚姩鍦板悜瀹㈡埛绔繑鍥炲搷搴旂殑瀹氬紡錛屽厑璁告湇鍔″櫒绔富鍔ㄥ湴鍚戝鎴風(fēng)鎺ㄩ€佹暟鎹紝榪欏氨鍙互鍑忓皯瀹㈡埛绔彂璧瘋姹傜殑鏁伴噺銆?/span>
     鎬諱箣錛孒TTP/2涓昏鏄В鍐蟲€ц兘闂銆?/span>

2. 鍙戣搗HTTP/2
     HTTP/2浼?xì)鋴社敤涓嶩TTP/1鐩稿悓鐨刄RI scheme錛屽嵆http鍜宧ttps銆傝€屼笖瀹炵幇HTTP/2鐨勬湇鍔″櫒绔篃涓嶄細(xì)浣跨敤涓嶅悓鐨勭鍙e幓鍒嗗埆鏀寔HTTP/1鍜孒TTP/2銆傝繖鏍鋒湁鍒╀簬騫蟲粦鍦頒粠HTTP/1鍗囩駭鍒癏TTP/2銆傛瘯绔熺洰鍓嶅凡閮ㄧ講鐨勭粷澶ч儴鍒嗙綉緇滄湇鍔¢兘鍙敮鎸丠TTP/1錛屽綋鏈潵瀹冧滑鍗囩駭鍒癏TTP/2鏃訛紝濡傛灉鎹㈢敤浜嗕笉鍚孶RI scheme鎴栫鍙o紝閭d箞鑲畾浼?xì)瀵瑰鎴风漶旂敓鏋佸ぇ鐨勫奖鍝嶃€備絾鏄疕TTP/2鍗忚涓鴻繍琛屽湪http鍜宧ttps涓婄殑HTTP/2鍒嗗埆瀹氫箟浜嗕袱涓笉鍚岀殑鏍囪瘑絎︼細(xì)h2c鍜宧2銆俬2c涓殑"c"鎸囩殑鏄痗leartext錛屽嵆鏄庢枃銆傛湰鏂囧悗闈細(xì)浣跨敤h2c鎸囦唬榪愯鍦╤ttp2涓?鐩存帴浣跨敤TCP)鐨凥TTP/2錛岃€岀敤h2鎸囦唬榪愯鍦╤ttps涓?浣跨敤TLS)鐨凥TTP/2銆?/span>
     閭d箞錛屾敮鎸丠TTP/2鐨勫鎴風(fēng)濡備綍鐭ラ亾瀹冩墍榪炴帴鐨勬湇鍔″櫒绔槸鍚︿篃鏀寔HTTP/2鍛紵
     瀵逛簬h2c錛屾敮鎸丠TTP/2鐨勫鎴風(fēng)鍙互鍦ㄥ彂璧風(fēng)殑璇鋒眰涓嬌鐢℉TTP/1.1鐨刄pgrade澶撮儴鍘誨皾璇曡姹傛湇鍔″櫒鍗囩駭鍒癏TTP/2銆傝璇鋒眰鐨勬牸寮忓涓嬶細(xì)
GET / HTTP/1.1
Host: server.example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>
HTTP2-Settings鏄竴涓粡鐢盉ASE64緙栫爜榪囩殑瀛楃涓詫紝鍏跺師濮嬪唴瀹規(guī)槸瀹㈡埛绔皢瑕佸彂閫佺殑SETTINGS甯х殑杞借嵎錛屽嵆涓€浜涢厤緗弬鏁般€?/span>
     濡傛灉鏈嶅姟鍣ㄧ鏀寔HTTP/2錛屽畠?yōu)鍝嶅?101 Switching Protocols"錛岃〃紺哄彲浠ヨ繘琛屽崌綰с€傝鍝嶅簲鐨勬牸寮忓涓嬶細(xì)
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: h2c
     濡傛灉鏈嶅姟鍣ㄧ涓嶆敮鎸丠TTP/2錛屽垯浼?xì)蹇界暐Upgrade璇鋒眰澶撮儴錛屽悗緇緷鐒朵嬌鐢℉TTP/1.1銆?/span>
     瀵逛簬h2錛屼細(xì)浣跨敤鍒板崗璁甌ransport Layer Security (TLS) Application-Layer Protocol Negotiation Extension (RFC7301)錛屽嵆TLS-ALPN銆傝鍗忚鍏佽瀹㈡埛绔拰鏈嶅姟鍣ㄧ灝變嬌鐢ㄤ綍縐嶇増鏈殑HTTP榪涜鍗忓晢銆傚鏋淭LS-ALPN鍦ㄧ幇瀹炰腑榪愯鑹ソ鐨勮瘽錛屼篃璁告煇澶╄繕浼?xì)鋴社敤璇ユ栆?guī)硶鍘誨崗鍟嗕嬌鐢ㄥ埆鐨勫崗璁€?/span>
     褰撳鎴風(fēng)涓庢湇鍔″櫒绔兘鍚屾剰浣跨敤HTTP/2鏃訛紝鍙屾柟閮介渶瑕佸悇鑷彂鍑轟竴涓繛鎺ュ簭璦€(Connection Preface)浠ヨ繘琛屾渶鍚庣殑紜銆?/span>
     瀹㈡埛绔湪鎺ユ敹鍒版湇鍔″櫒绔殑"101 Switching Protocols"鍝嶅簲(閽堝h2c)鎴朤LS榪炴帴鐨勭涓€涓簲鐢ㄦ暟鎹瓧鑺?閽堝h2)涔嬪悗浼?xì)绔嬪崨_彂鍑鴻繛鎺ュ簭璦€銆傝搴忚█鐨勫紑澶存槸"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"(鍏跺崄鍏繘鍒跺艦寮忎負(fù)"0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a")(1)錛屽悗闈㈠繀欏誨啀璺熶竴涓猄ETTINGS甯э紝鍝€曡繖涓撫鏄┖鐨勩€?/span>
     鏈嶅姟鍣ㄧ鐨勮繛鎺ュ簭璦€鍒欑敱涓€涓猄ETTINGS甯ф瀯鎴愶紝璇ュ撫蹇呴』鏄湇鍔″櫒绔湪HTTP/2榪炴帴涓彂閫佺殑絎竴涓撫銆傝繖涓猄ETTINGS甯у彲浠ヤ負(fù)絀猴紝涔熷彲浠ュ寘鍚竴浜涘笇鏈涘鎴風(fēng)濡備綍涓庤嚜宸辮繘琛岄€氫俊鐨勫繀瑕侀厤緗俊鎭€?/span>

3. 甯?Frame)
     HTTP/2娑堟伅浣跨敤浜岃繘鍒舵牸寮?瀹為檯緙栫爜鏃朵嬌鐢ㄥ崄鍏繘鍒朵功鍐?錛岀浉姣斾簬鏂囨湰鏍煎紡錛岃繖鏍峰彲浠ユ彁楂樻秷鎭鐞嗙殑鏁堢巼銆侶TTP/2娑堟伅鐨勬渶灝忓崟鍏冧負(fù)甯э紝瀹冪敱澶撮儴涓庤澆鑽?Payload)緇勬垚銆傛瘡涓撫鐨勯暱搴﹀繀欏繪槸涓€涓垨澶氫釜8姣旂壒浣嶅瓧鑺?octet錛屼笅鏂囧皢鍏剁畝鍐欎負(fù)"瀛楄妭")銆?/span>
     甯уご閮ㄤ緷嬈″寘鍚湁濡備笅鐨?涓瓧孌碉細(xì)
     闀垮害(Length)錛氳瀛楁鍗犵敤24涓瘮鐗逛綅錛屼唬琛ㄥ撫杞借嵎鐨勯暱搴︺€傝闀垮害鏄竴涓?4浣嶇殑鏃犵鍙鋒暣鏁般€?/span>
     綾誨瀷(Type)錛氳瀛楁鍗犵敤8涓瘮鐗逛綅錛屼唬琛ㄥ撫鐨勭被鍨嬨€?/span>
     鏍囧織(Flags)錛氳瀛楁鍗犵敤8涓瘮鐗逛綅錛屼唬琛ㄥ撫鎵€瀹氫箟鐨勪竴涓垨澶氫釜鏍囧織銆傚茍涓嶆槸鎵€鏈夌殑甯ч兘瀹氫箟浜嗘爣蹇椼€?/span>
     淇濈暀浣?R)錛氳瀛楁鍗犵敤1涓瘮鐗逛綅錛屽叾璇箟灝氭湭琚畾涔夈€傚湪璇誨彇甯ф椂錛岃浣嶉渶瑕佽蹇界暐錛涗絾鍦ㄥ彂閫佸撫鏃訛紝璇ヤ綅闇€瑕佷繚鎸佷負(fù)0(0x0)銆?/span>
     嫻佹爣璇嗙(Stream Identifier)錛氳瀛楁鍗犵敤31涓瘮鐗逛綅錛屼唬琛ㄨ甯ф墍鍦ㄦ祦鐨勬爣璇嗙銆?/span>
     鍦ㄥご閮ㄤ箣鍚庯紝绱ф帴鐫€鐨勫氨鏄澆鑽楓€傝澆鑽風(fēng)殑緇撴瀯涓庡唴瀹瑰畬鍏ㄧ敱甯х殑綾誨瀷鍐沖畾錛屽畠鐨勯暱搴︿篃鏄笉瀹氱殑銆?br />
     HTTP/2瀹氫箟浜嗗涓?0縐嶄笉鍚岀被鍨嬬殑甯с€?/span>
     DATA錛氱敤浜庢惡甯︿竴緇勯暱搴︿笉瀹氱殑瀛楄妭銆備竴涓垨澶氫釜DATA鍙綔涓鴻姹傛垨鍝嶅簲鐨勮澆鑽楓€?/span>
     HEADERS錛氱敤浜庡紑鍚竴涓祦錛屽茍鍙惡甯︿竴涓ご閮ㄥ潡鐗囨柇銆傚ご閮ㄥ潡鎸囩敱涓€涓狧EADERS/PUSH_PROMISE甯у拰绱ч殢瀹冪殑闆跺埌澶氫釜CONTINUATION甯х粍鎴愮殑闆嗗悎錛屽洜涓哄彧鏈夊畠浠墠鍙兘鎼哄甫澶撮儴淇℃伅銆傝繖涓泦鍚堝彲琚垎鍓叉垚涓€涓垨涓€緇勫瓧鑺傦紝榪欐牱鐨勫瓧鑺傝縐頒負(fù)澶撮儴鍧楃墖鏂€傚ご閮ㄥ潡涓悇涓壒瀹氱被鍨嬬殑甯у繀欏葷揣绱х浉閭伙紝涓嶈兘鍑虹幇鍏跺畠綾誨瀷鐨勫撫銆?/span>
     PRIORITY錛氱敤浜庢寚瀹氬彂閫佺寤鴻鐨勬祦浼樺厛綰с€?/span>
     RST_STREAM錛氱敤浜庣珛鍗崇粓姝㈡祦銆傚綋甯屾湜鍙栨秷涓€涓祦鎴栧彂鐢熼敊璇椂錛屽氨鍙彂閫丷ST_STREAM甯с€?/span>
     SETTINGS錛氱敤浜庢惡甯﹀彲浠ュ獎(jiǎng)鍝嶄袱绔箣闂撮€氫俊鏂瑰紡鐨勯厤緗弬鏁般€係ETTINGS甯у畾涔変簡涓€涓狝CK鏍囧織錛岀敤浜庢寚紺鴻甯ф墍璁劇疆鐨勫弬鏁版槸鍚﹀凡琚帴鏀剁鑾風(fēng)煡銆傚綋鏀跺埌涓€涓猄ETTINGS涓斿叾涓殑ACK鏍囧織涓?鏃訛紝鎺ユ敹绔繀欏誨敖鍙兘蹇殑搴旂敤鍏朵腑宸茶鏇存柊鐨勫弬鏁般€?/span>
     PUSH_PROMISE錛氱敤浜庡悜鎺ユ敹绔€氱煡鍙戦€佺灝嗚鍒涘緩鐨勬祦銆傚綋鎺ユ敹绔帴鏀跺埌璇ュ撫鏃訛紝鏂扮殑嫻佸皻鏈鍙戦€佺鍒涘緩錛屼絾鍙戦€佺鎵胯浼?xì)鍒涘圾櫙箒銆傝甯х敤浜庡疄鐜癏TTP/2鐨勯噸瑕佺壒鎬?鏈嶅姟鍣ㄧ鎺ㄩ€?Server Push)"銆?/span>
     PING錛氱敤浜庢祴閲忓彂閫佺涓庢帴鏀剁涔嬮棿鐨勬渶灝忓線榪旀椂闂淬€傝繖涓庝嬌鐢ㄤ紬鎵€鍛ㄧ煡鐨刾ing鍛戒護(hù)鐨勭洰鐨勭浉浼鹼紝鏄負(fù)浜嗘祴璇曟煇涓┖闂茬殑榪炴帴鏄惁榪樺彲鐢ㄣ€?/span>
     GOAWAY錛氱敤浜庡彂璧峰榪炴帴鐨勫叧闂紝鎴栬Е鍙戜弗閲嶇殑閿欒鏉′歡銆傝甯у厑璁鎬竴绔紝鍦ㄥ畬鎴愬涔嬪墠宸插垱寤虹殑嫻佺殑澶勭悊鐨勫悓鏃訛紝浼橀泤鍦板仠姝㈡帴鏀舵柊鐨勬祦銆備竴绔湪鍒涘緩鏂扮殑嫻侊紝鍙︿竴绔湪鍙戦€丟OAWAY錛岃繖涓よ€呬箣闂村ぉ鐒跺瓨鍦ㄧ潃绔炰簤鍏崇郴銆備負(fù)浜嗗氨瀵硅繖縐嶆儏鍐碉紝鍙戦€佺鍦ㄥ彂閫丟OAWAY鏃朵細(xì)璁╁畠鎼哄甫涓?璇ュ彂閫佺鎵€鐭ユ檽鐨?鎺ユ敹绔渶鍚庡垱寤虹殑嫻佺殑鏍囪瘑絎︼紝褰撹GOAWAY琚彂閫佷箣鍚庯紝鍙戦€佺灝嗕細(xì)蹇借鐢辨帴鏀剁鍒涘緩鐨勪換浣曚竴涓爣璇嗙姣旇鏍囪瘑絎﹀ぇ鐨勬祦銆?/span>
     WINDOW_UPDATE錛氱敤浜庢祦閲忔帶鍒躲€傝甯х殑杞借嵎鐢變竴涓崟姣旂壒淇濈暀浣嶅拰涓€涓?1姣旂壒浣嶇殑鏃犵鍙鋒暣鏁扮粍鎴愩€傝鏁存暟鍚戣甯х殑鎺ユ敹绔寚紺轟簡鍏跺悜褰撳墠嫻侀噺鎺у埗紿楀彛鎵€鑳藉鍔犱紶杈撻噺鐨勫€箋€?/span>
     CONTINUATION錛氱敤浜庣戶緇彂閫佸ご閮ㄥ潡鐗囨柇銆傚彧瑕佸悓涓€涓祦涓墠闈㈢殑甯ф槸HEADERS錛孭USH_PROMISE鎴朇ONTINUATION錛屽茍涓旇甯ф病鏈夎緗瓻ND_HEADERS鏍囧織錛岄偅涔堝彲鏃犻檺閲忓湴鍙戦€丆ONTINUATION甯с€?/span>
     閮ㄥ垎甯э紝DATA錛孒EADERS鍜孭USH_PROMISE錛岀殑杞借嵎涓彲鑳藉寘鍚~鐧?Padding)銆傚~鐧藉湪涓氬姟涓婃病鏈夊疄闄呯殑鐢ㄥ錛屽畠鐨勫嚭鐜版槸鍩轟簬瀹夊叏鐩殑銆傛瘮濡傦紝鍙互鐢ㄥ畠鏉ユ壈涔卞疄闄呮暟鎹殑闀垮害錛屼互鍑忚交鐗瑰畾鐨凥TTP鏀誨嚮銆?br />
     鍙戦€佺鍙戦€佺殑甯х殑鏈€澶ч暱搴﹁灝婇噸鎺ユ敹绔瀹氱殑SETTINGS_MAX_FRAME_SIZE鐨勫€箋€備絾璇ュ€肩殑鑼冨洿瑕佷粙浜?^14鑷?^24-1涓瓧鑺備箣闂淬€?/span>

4. 嫻?Stream)
     嫻佹槸鐢ㄤ簬鍦ㄥ鎴風(fēng)涓庢湇鍔″櫒绔箣闂磋繘琛屽撫浼犻€佺殑閫氶亾錛屽悓涓€涓猅CP榪炴帴涓彲浠ュ悓鏃舵湁澶氫釜嫻侊紝濡備笅鍥炬墍紺猴紝
┌────────┐          Connection           ┌────────┐
│        │ ============================= │        │
│        │    --------------------- <-- Stream    │
│        │    ┌─────┐┌─────────┐┌─┐      │        │
│        │    └─────┘└─────────┘└─┘ <-- Frame     │
│        │    ---------------------      │        │
│ Client │                               │ Server │
│        │    ----------                 │        │
│        │    ┌──┐┌────┐                 │        │
│        │    └──┘└────┘                 │        │
│        │    ----------                 │        │
│        │ ============================= │        │
└────────┘                               └────────┘
鏈嶅姟鍣ㄧ鍜屽鎴風(fēng)鍙互浜ら敊鍦板悜鍚屼竴涓繛鎺ヤ腑鐨勪笉鍚屾祦涓紶閫佸撫銆傚彲浠ユ妸涓€涓祦鐪嬩綔HTTP/1涓殑涓€涓繛鎺ャ€傚鎴風(fēng)涓庢湇鍔″櫒绔湪鍚屼竴涓祦涓殑浜や簰渚濈劧閬靛驚鍙戦€佽姹?絳夊緟鍝嶅簲妯″紡銆備袱绔兘鍙互鍒涘緩鏂扮殑嫻侊紝鍏變韓瀵規(guī)柟鍒涘緩鐨勬祦錛屼篃鍙互鍏抽棴瀵規(guī)柟鍒涘緩鐨勬祦銆傚撫鍦ㄦ祦涓殑欏哄簭鏄湁鎰忎箟鐨勶紝鎺ユ敹绔細(xì)浠ユ帴鏀跺埌鐨勯『搴忓幓澶勭悊甯с€?br />      姣忎釜嫻侀兘鏈変竴涓爣璇嗙錛屾槸涓€涓?1姣旂壒浣嶇殑鏃犵鍚堟暣鏁般€傚湪鍚屼竴涓繛鎺ヤ腑錛屾祦鏍囪瘑絎︽槸鍞竴鐨勩€傜敱瀹㈡埛绔垱寤虹殑嫻佺殑鏍囪瘑絎︿負(fù)濂囨暟錛岀敱鏈嶅姟鍣ㄥ垱寤虹殑嫻佺殑鏍囪瘑絎︿負(fù)鍋舵暟銆備絾鏍囪瘑絎︿負(fù)0鐨勬祦鍙湅浣滆繛鎺ワ紝鐢ㄤ簬榪炴帴鎺у埗淇℃伅錛屽垱寤烘柊鐨勬祦鏃朵笉鍙嬌鐢ㄨ鏍囪瘑絎︺€傚悓涓€涓繛鎺ヤ腑鐨勪換浣曚竴涓祦鐨勬爣璇嗙閮戒笉鍙噸鐢紝鍗充究榪欎釜嫻佸凡琚叧闂簡銆傚浜庨暱鏃墮棿娌℃湁涓柇鐨勮繛鎺ワ紝鍙兘浼?xì)鍑虹幇鏍囪瘑绗︿笉澶熺敤鐨勬儏鍐靛Q岄偅鏃跺氨蹇呴』寮哄埗鍒涘緩涓€涓柊鐨勮繛鎺ャ€?br />      HTTP/2鍗忚涓烘祦鐨勭敓鍛藉懆鏈熷畾涔変簡7縐嶇姸鎬?sup>(2)錛歩dle錛宺eserved(local)錛宺eserved(remote)錛宱pen錛宧alf closed(local)錛宧alf closed(remote)鍜宑losed銆傚綋涓€绔帴鏀舵垨鍙戦€佸ご閮ㄥ潡鎴?甯ATA鍜孒EADERS鐨?鏍囧織RST_STREAM鍚庡彲浣挎祦鐨勭姸鎬佸彂鐢熻漿鍙樸€?/span>
     浣跨敤嫻佹潵瀹炵幇澶氬伐灝變細(xì)寮曡搗瀵筎CP榪炴帴浣跨敤鐨勭珵浜夛紝榪欎細(xì)閫犳垚嫻佺殑闃誨銆傚熀浜庡撫WINDOW_UPDATE鐨勬祦閲忔帶鍒舵柟妗堝彲浠ョ‘淇濈浉鍚岃繛鎺ヤ腑鐨勬祦鐩鎬簰涔嬮棿涓嶄細(xì)浜х敓鐮村潖鎬у共鎵般€傛祦閲忔帶鍒跺彲浠ヤ綔鐢ㄤ簬涓や釜灞傞潰錛屽嵆鍗曚釜嫻佹垨鏁翠釜榪炴帴銆傚彧鏈夊撫DATA闇€瑕侀伒瀹堟祦閲忔帶鍒訛紝鎵€鏈夊叾瀹冪殑甯ф墍鏈夋秷鑰楃殑絀洪棿鍧囦笉浼?xì)鍗犵敤娴侀噺鎺у埗绐楀彛銆侶TTP/2鍗忚鍙槸瀹氫箟浜哤INDOW_UPDATE甯х殑緇撴瀯鍜岃涔夛紝鍗忚鐨勫疄鐜板彲浠ラ€夋嫨浠諱綍閫傜敤鑷繁鐨勬祦閲忔帶鍒剁畻娉曘€?/span>
     嫻佸彲浠ユ湁浼樺厛綰с€傚鎴風(fēng)鍦ㄥ垱寤轟竴涓柊鐨勬祦鏃訛紝鍙湪HEADERS涓寚瀹氫紭鍏堢駭鏉冮噸銆傚湪鍚庣畫浠諱綍鏃墮棿錛岄€氳繃PRIORITY鍙互鏀瑰彉?gòu)箒鐨勪紭鍏埦Uф潈閲嶃€傚湪騫跺彂鑳藉姏鏈夐檺鐨勬儏鍐典笅錛岄珮鏉冮噸嫻佺殑甯т細(xì)琚紭鍏堜紶閫併€傛潈閲嶇殑鍊煎繀欏諱粙浜?鑷?56涔嬮棿錛岄粯璁ゆ潈閲嶄負(fù)16銆?/span>嫻佷笌嫻佷箣闂磋繕鍙互鏈変緷璧栧叧緋伙紝榪欑鍏崇郴浼?xì)缁勬垚涓€媯典緷璧栧叧緋繪爲(wèi)銆備竴涓祦鑳藉鎸囧畾鑷繁鎴愪負(fù)鍙︿竴涓祦鐨勫瓙嫻併€傝繖涓€榪囩▼錛屽彲浠ユ槸闈炴帓浠栫殑錛屼篃鍙互鏄帓浠栫殑銆傞潪鎺掍粬鎬т緷璧栵紝鏄寚涓€涓祦鍦ㄥ皢鑷繁鍙樻垚鍙︿竴涓祦鐨勫瓙嫻佺殑榪囩▼涓紝鍏佽鍙︿竴涓祦榪樻湁鍒殑瀛愭祦錛屽嵆鍏佽鏈夎嚜宸辯殑鍏勫紵嫻佸瓨鍦ㄣ€傛帓浠栨€т緷璧栵紝鎸囧湪鍓嶈堪榪囩▼涓紝涓嶅厑璁稿彟涓€涓祦榪樻湁鍒殑瀛愭祦銆傚鏋滃彟涓€涓祦宸茬粡鏈夊瓙嫻佷簡錛岄偅涔堣嫻佷細(xì)鎶婃墍鏈夋綔鍦ㄧ殑鍏勫紵嫻佸厛鍙樻垚鑷繁鐨勫瓙嫻侊紝鐒跺悗鍐嶄嬌鑷繁鎴愪負(fù)鍙︿竴涓祦鐨勫敮涓€瀛愭祦銆傚叾瀹烇紝鎺掍粬鎬т緷璧栫殑浣滅敤灝辨槸涓轟簡鑳藉鎵撶牬宸叉湁鐨勫叧緋繪爲(wèi)錛屽湪鏃㈡垚鐨勭埗瀛愯妭鐐逛腑鎻掑叆鏂扮殑鑺傜偣銆傚惁鍒欙紝鍙兘涓哄凡鏈夎妭鐐規(guī)坊鍔犲瓙鑺傜偣錛岄偅涔堝叧緋繪爲(wèi)灝嗕笉鍙兘榪涜閲嶆瀯銆傛墍鏈夌殑嫻佸湪琚垱寤烘椂錛岄粯璁ゆ垚涓烘爣璇嗙涓?x0鐨勬祦鐨勫瓙嫻併€傚湪"鏈嶅姟鍣ㄧ鎺ㄩ€?涓敓鎴愮殑"鎺ㄩ€?嫻佸皢鑷姩鍦版垚涓虹敓鎴愯鎺ㄩ€佹祦鐨勬祦鐨勫瓙嫻侊紝鍏墮粯璁ゆ潈閲嶄篃涓?6銆?/span>

5. 娑堟伅浜ゆ崲
5.1 璇鋒眰/鍝嶅簲浜ゆ崲
     HTTP/2娌胯浜咹TTP/1鐨勮涔夛紝鍗蟲墍鏈夌殑璇鋒眰涓庡搷搴旇涔夊潎寰楀埌浜嗕繚鐣欙紝灝界浼犻€掕繖浜涜涔夌殑璇硶宸茬粡鏀瑰彉浜嗐€?/span>
     涓€涓狧TTP/2娑堟伅鐢卞涓嬪嚑涓儴鍒嗙粍鎴愶細(xì)
     [1]浠呭浜庡搷搴旀秷鎭紝鍙互鍖呭惈涓€涓惡甯︽湁1xx鍝嶅簲澶撮儴鐨勫ご閮ㄥ潡銆傝澶撮儴鍧楃敱涓€涓狧EADERS甯у拰绱ч殢瀹冪殑闆跺埌澶氫釜CONTINUATION甯х粍鎴愩€?/span>
     [2]涓€涓ご閮ㄥ潡銆傝澶撮儴鍧楃敱涓€涓狧EADERS甯у拰绱ч殢瀹冪殑闆跺埌澶氫釜CONTINUATION甯х粍鎴愩€?/span>
     [3]闆跺埌澶氫釜鎼哄甫鏈変綋閮?Body)娑堟伅鐨凞ATA甯с€侶TTP/1涓嬌鐢ㄧ殑"鍒嗗潡(chunked)"浣撻儴灝嗕笉閫傜敤浜嶩TTP/2銆傚洜涓轟竴涓綋閮ㄥ彲鐢卞涓狣ATA甯х粍鎴愶紝鎵€浠TTP/2鐨勪綋閮ㄥぉ鐒跺氨鏄彲鍒嗗潡鐨勩€?/span>
     [4]涓€涓彲鑳藉瓨鍦ㄧ殑鍖呭惈鐫€灝鵑儴娑堟伅鐨勫ご閮ㄥ潡銆傝澶撮儴鍧楃敱涓€涓狧EADERS甯у拰绱ч殢瀹冪殑闆跺埌澶氫釜CONTINUATION甯х粍鎴愩€?br />
     HTTP/2浠嶇劧娌跨敤HTTP/1涓殑澶撮儴瀛楁錛屼絾瀛楁鍚嶇О涓殑瀛楁瘝蹇呴』鍏ㄩ儴涓哄皬鍐欍€傚彟澶栵紝榪樺皢HTTP/1娑堟伅寮€濮嬭(璇鋒眰涓殑璇鋒眰琛?/a>涓庡搷搴斾腑鐨?a >鐘舵€佽)涓殑娑堟伅錛屽垎瑙f垚浜嗚嫢騫蹭吉澶撮儴瀛楁錛屾綾誨瓧孌靛潎浠ュ啋鍙?:)寮€澶淬€?/span>
     HTTP/1璇鋒眰琛屾牸寮忎負(fù)"method request-target HTTP-version"錛屽搴旂殑HTTP/2浼ご閮ㄥ瓧孌墊湁:method=method鍜?path=request-target錛屼絾HTTP-version鏃犲搴斿瓧孌碉紝榛樿涓篐TTP/2銆?/span>
     HTTP/1鐘舵€佽鏍煎紡涓?HTTP-version status-code reason-phrase"錛屽搴旂殑HTTP/2浼ご閮ㄥ瓧孌墊湁:status=status-code銆備絾HTTP-version鏃犲搴斿瓧孌碉紝榛樿涓篐TTP/2錛況eason-phrase涔熸棤瀵瑰簲瀛楁錛屽洜涓哄彲浠ラ€氳繃鐘舵€佷唬鐮佹煡鎵懼埌鍏跺搴旂殑reason-phrase銆侶TTP/2鍗忚鏄湪灝介噺鍑忓皯鍐椾綑娑堟伅銆?/span>
     HTTP/2鍗忚榪樹負(fù)璇鋒眰澶撮儴瀹氫箟浜嗗彟澶栦袱涓吉瀛楁錛?/span>
     :scheme錛歎RI涓殑scheme閮ㄥ垎銆傚畠鍙互涓嶄粎浠呮槸http鎴杊ttps錛屽洜涓烘湁鏃跺€欏彲鑳戒細(xì)涓庨潪HTTP鏈嶅姟榪涜浜や簰銆?/span>
     :authority錛歎RI涓殑鎺堟潈閮ㄥ垎銆傚嵆錛宻cheme://user:password@host:port/path?query#fragment涓殑"user:password@host:port"銆?/span>
     HTTP/2鍗忚8.1.3鑺備腑緇欏嚭涓€浜涚畝鍗曠ず渚嬶紝灞曠ず浜嗗浣曞皢HTTP/1娑堟伅瀵瑰簲鍒癏TTP/2娑堟伅銆?/span>
5.2 鏈嶅姟鍣ㄧ鎺ㄩ€?/span>
     HTTP/2鐨勬湇鍔″櫒绔帹閫佹槸浼犵粺鐨勮姹?鍝嶅簲妯″紡鐨勪竴縐嶇壒孌婂艦寮忋€傛湇鍔″櫒绔湪鏀跺埌瀹㈡埛绔殑璇鋒眰(涓昏姹?涔嬪悗錛屼負(fù)浜嗕富鍔ㄥ悜瀹㈡埛绔帹閫佹洿澶氱殑鍐呭錛屼細(xì)鑷姩鍦扮敓鎴愯嫢騫叉柊鐨勮姹?鎺ㄩ€佽姹?銆傛湇鍔″櫒鍚戝鎴風(fēng)鍙戦€佺殑鍝嶅簲涓紝涓嶄粎鍖呭惈瀵逛富璇鋒眰鐨勫搷搴?涓誨搷搴?錛岃繕鍖呭惈瀵規(guī)帹閫佽姹傜殑鍝嶅簲(鎺ㄩ€佸搷搴?銆?/span>
     瀹㈡埛绔彲浠ラ€氳繃鍙戦€佸寘鍚湁SETTINGS_MAX_CONCURRENT_STREAMS鍙傛暟鐨凷ETTINGS甯у幓紱佺敤鏈嶅姟鍣ㄧ鎺ㄩ€侊紝涔熷彲浠ラ€氳繃鍙戦€丷ST_STREAM甯у幓鍙栨秷宸茬粡鍙戣搗鐨勬湇鍔″櫒绔帹閫侊紝浣嗕笉鑳藉彂閫佸寘鍚湁END_STREAM鏍囧織鐨勫撫銆?br />
(1)"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"涓殑"PRI"涓?SM"鍚堣搗鏉ュ氨鏄?RRISM(媯遍暅)"銆傚懙鍛碉紝HTTPbis宸ヤ綔緇勮繖鏄兂琛ㄨ揪浠€涔堟剰鎬濆憿 ;-)
(2)鏈郴鍒楃殑鍚庣畫鏂囩珷瑙h浜嗘祦鐨勭姸鎬併€?br />


]]>
主站蜘蛛池模板: 轮台县| 秦皇岛市| 江孜县| 横峰县| 方正县| 云林县| 牡丹江市| 隆安县| 红安县| 丰台区| 三明市| 河池市| 韶关市| 贡觉县| 思茅市| 天津市| 满城县| 且末县| 重庆市| 溆浦县| 靖西县| 商河县| 卢龙县| 延长县| 蒙阴县| 南皮县| 衡水市| 乐至县| 息烽县| 高青县| 涿州市| 金乡县| 凉山| 五大连池市| 临安市| 仁寿县| 东乌珠穆沁旗| 江川县| 泸水县| 大同县| 乌海市|