http2解析系列

参考文档

rfc7540
rfc7541

背景

公司需求,忽略前因后果,有一个较为麻烦的点。能拿到一堆16进制数据,需要解析出http2的原数据,这一堆16进制数据可能是拆开的,也可能是多条数据合并到一起的,需要解析出header头和请求内容。且解析后的数据可能是gzip压缩的,如果是gzip压缩的文本类型,如text,json等,需要解析出文本并存储;解析后的数据也可能是原文。

示例

	data := []string{
		"505249202a20485454502f322e300d0a0d0a534d0d0a0d0a",
		"000006040000000000000401000000",
		"00000408000000000000ff0001",
		"00004f01050000000382049b60f1f460722d58d292d9531616a90b616c62b193a8e62afd107abf419644acad295649d0bd7350848d35ac93da930ceb90f4ff875886a8eb10649cbf50839bd9ab7a893f59d29ad86577d70f",
		"000012040000000000000300000080000400010000000500ffffff0000040800000000007fff0000",
		"000000040100000000",
		"000000040100000000",
		"000423010400000003887685de5aa635455f8b1d75d0620d263d4c7441ea0f0d033338366196c361be9413ea5f29141004ca8066e32cdc13aa62d1bf7b8b84842d695b05443c86aa6f588aa47e561cc581c034f001408821ea496a4ad4c8df93ce6c1db1794d999b9f3f970cc782367fd860830f139be4c7f222882218630c6e4628df79a8c8e8de8e52048571e71afe7f6c96c361be9413ea5f29141004ca8066e322b827d4c5a37f408ef2b472124a9620c9395642469b5186df7b5c58f26f408bf2b75948b10649cbd4bebfaf9d29aee30c566aaa2d8b1a99905b3b96c5e3f492c8b9ec9981c8b5634a4b654c585aa42d85b18ac64ea398abf441ea408ef2b24e85a71a27589611c68a4a478e0bc003aeb4f05b138dbccb820362408cf2b24e85ac2f6b4a84ac693f9d78b292595e2b25009f7de95c6de2b2500961c8cc6ebeeac3232eb2c8bf408df2b24e85ac2a2b3d482ac9352596c361be9413ea5f29141004ca8066e32cdc1094c5a37f408df2b24e859093d8398ab1281a1187ddbe1d37e1db7f7ceda8410ac0742b05a0fd2841927289b5e8112a64227fff60fa07d0800581f58fff9f4a10649ca25e8112a64227fff6dfd03ff9f4a10649ca25e8112a64227fff6dfd03ff9f4a7720c9394205c953816d9ffd83e81f42001607d63ffe7d29dc8324e57d7254e05b67ff6173e81ffc4089f2b585ed6950958d5f8f9648e4b921001b8272e3217ae5c71c408af2b252b26c190ab24737963490019fb24952c419272c13993f69f5596042469313408cf2b5854567a9055886aa53ff8f9648e4b921001b8272e3217ae5c71c408bf2b5854567a905588324e5862c931629cc9f408a416cee5b1649a935537f9724952c419272fdc854120c7937fd16498bf725b640173f408bf2b252b26c190ab4e7427fff09004a2236eb608e40bb238291b6e5000658dc69d78028e375a8df1c850b6f46468523408d969c14836db6dc7de91b7c8410c9201f946dbf1824707211a788fb6090a01b32bedca22b32b858df91d7db2372048372421632b8e140f38365f032dbb1c607c8e082376378826872b4c81d92409051c82091f9060133200af0c4c81c74050b8495a13c2f4089f2b252b26c190ab1a4a900161321109f0859644ebf7afb4e5fbcddf742d0af5d71f0debab38079ac01770357d9c0ec37de58004088f2b252b50798d27f9a1004c84427c2165913afdebed397ef377dd0b42bd75c7c37aeff5a839bd9ab40921d06591e0d2a569a83c63a1640fb9526a4bf870ba065e101e03b0f068565b644f87f4085f2b10649cb9ac7937a9bef6b8b460d1163c9bd490d6557022b810b8eb6065917408cf2b23c1a54ac81f72a4d497f96df697e940094ca3a941004d28066e059b8cbea62d1bf408cf2b23c1a54ac419272a4d49785138065e7bf54012a408e49a935532c3a283f858f61a6355f012a408528e6a0a69392647248200801740d05d680fbc00842c8445f0001820000000000031f8b0800000000000003b493dd8edb201085df85ebd8e61f9c5759ad2af00c5927fe1310abda28fbec254aa366a5b657f10dd20ce8cc37e89c0b99dc88644f1c548bcb19e354459c002346b2232bc6d4cf53b96735ad1513a537bafed6f8c87949fba649415401ab3ca77a390c29bbbc94e29c7b37d7dd3c36b33f367fc49b877843a9d6de367d297fd61f791c8a74c4349f638789ecdf2ee41c8757cf39a6db02a08a6e07c2522b9c90c248635a6741486e02d75232a5597938e08a05815d779bc0fc5efa8e6399a7a8bd41cb5508b493d207e44081231861704b9cb5d4734c5fc35225383d7f92e83cb30ec083d242510bae05ebb9744160eb1d3c53bdef4870c3e05d777a1dda43f10ef5a87ecc4beec7fe13b71a84d3a19f6e36bc9055dcce7fa7a45ac5b7a0881214c65f9693225f654cb9b9eb6e9e97ffcebb9bc241a05e8696794d191a6f5971456885a4de688d6a0babfe1debc9a91218b742b9d6b69da7b2e4990372c5997220b895df9c7abd5e7f010000ffff03001ed95fc7f9040000",
		"000000000100000003",
		"00002b01050000000582049d60f1f460722d58d292d9531616a90b616c600071c8de60d5485f2bf447c18772868fd24a8800b7bf",
		"00030c0104000000058adb5f901d75d0620d263d4c741f71a0961ab4ff0f0d85089c13cfb76196df3dbf4a09e52f948a080265400ae36fdc0054c5a37fda52848fd24a8fda7f1a94f7be6c9aba6c676b349c00cac65ebb38f3d9041f0f139afe49232f01e646cb4cbad3aebe37a465a13b289c69a0b6e07f9f6c96df3dbf4a09e52f948a080265400ae36f5c65d53168dfd97f19b29d29aee30c566aaa2d8b1a99905b3b96c5e3f492c8b9ec9981c8b5634a4b654c585aa42d85b18001c723798355217cafd11f7f198f0b8cbceb8d38cbc2640ebcfb6ebe1f7f199c78b215b91e215a6e4646465c6de215a6e4586f3850040b0de0b6223d7f1996df3dbf4a09e52f948a080265400ae36f5c65e53168dfd87cf49648e4b92100cdc96e0d972e5c0bdf4a10649cacb8bd02254c844fffec1f40fa1000b03eb1fff3e9420c9395a757a044a99089fffd83e81ffcfa508324e569d5e8112a64227fff61fa07ff3e94ee419272beb92a702db3ffb07d03e84071607d63ffe7d29dc8324e57d7254e05b67ff6e7d03ff97f188f9648e4b92100cdc086e36cbd72e3e1d77f178f9648e4b92100cdc086e36cbd72e3e1d67f169624952c419272fdc854120c7937fd16498bf725b640e77f16ff09004b185b7c6e3c070aeb2e4a17032806f124682db6013cd91d8dc038e3ceb2f88928cb2cb1ba0246f472904403ed0a371f14a2682e14211b6f38c95e03e068aeb646998d979e74a16596480684008c422b32b830bf2b2dbef92508c51ca000071b4fb6dbb2108590607c62191b7c8ec817da7092146f14a465c75c66565f8de248ccb1b242bee8ff7f16a900161321109e081b7c01799bcdbee044fb77b06065fbf761badacee1bae3edb77421c226b0b2f2c0077f16991004c844278206df005e66f36fb8113eddec18197efdd86eb77f15870ba065d644cb410f068569a0badbbf7f159ac7937a9bef6b8b460d1163c9bd490d6557021b8d882c882f362f5e918fd24a8500b044e09e7da6022704f3edff7f1696df3dbf4a09e52f948a0802654033700d5c0b2a62d1bf7f1685700d34f3dfd5d47f1492647248200801740d05d680fbc079f0ba064b0020000000000000052f2a2120466f72206c6963656e736520696e666f726d6174696f6e20706c656173652073656520696e6465782e6a732e4c4943454e53452e747874202a2f0a2166756e6374696f6e2874297b66756e6374696f6e20652865297b666f7228766172206e2c692c6f3d655b305d2c613d655b315d2c633d302c753d5b5d3b633c6f2e6c656e6774683b632b2b29693d6f5b635d2c4f626a6563742e70726f746f747970652e6861734f776e50726f70657274792e63616c6c28722c69292626725b695d2626752e7075736828725b695d5b305d292c725b695d3d303b666f72286e20696e2061294f626a6563742e70726f746f747970652e6861734f776e50726f70657274792e63616c6c28612c6e29262628745b6e5d3d615b6e5d293b666f7228732626732865293b752e6c656e6774683b29752e7368696674282928297d766172206e3d7b7d2c723d7b303a307d3b66756e6374696f6e20692865297b6966286e5b655d2972657475726e206e5b655d2e6578706f7274733b76617220723d6e5b655d3d7b693a652c6c3a21312c6578706f7274733a7b7d7d3b72657475726e20745b655d2e63616c6c28722e6578706f7274732c722c722e6578706f7274732c69292c722e6c3d21302c722e6578706f7274737d692e653d66756e6374696f6e2874297b76617220653d5b5d2c6e3d725b745d3b69662830213d3d6e296966286e29652e70757368286e5b325d293b656c73657b766172206f3d6e65772050726f6d697365282866756e6374696f6e28652c69297b6e3d725b745d3d5b652c695d7d29293b652e70757368286e5b325d3d6f293b76617220612c633d646f63756d656e742e637265617465456c656d656e74282273637269707422293b632e636861727365743d227574662d38222c632e74696d656f75743d3132302c692e6e632626632e73657441747472696275746528226e6f6e6365222c692e6e63292c632e7372633d66756e6374696f6e2874297b72657475726e20692e702b22222b287b323a2276656e646f72737e6c702d73646b227d5b745d7c7c74292b222e6a73227d2874293b76617220733d6e6577204572726f723b613d66756e6374696f6e2865297b632e6f6e6572726f723d632e6f6e6c6f61643d6e756c6c2c636c65617254696d656f75742875293b766172206e3d725b745d3b69662830213d3d6e297b6966286e297b76617220693d65262628226c6f6164223d3d3d652e747970653f226d697373696e67223a652e74797065292c6f3d652626652e7461726765742626652e7461726765742e7372633b732e6d6573736167653d224c6f6164696e67206368756e6b20222b742b22206661696c65642e5c6e28222b692b223a20222b6f2b2229222c732e6e616d653d224368756e6b4c6f61644572726f72222c732e747970653d692c732e726571756573743d6f2c6e5b315d2873297d725b745d3d766f696420307d7d3b76617220753d73657454696d656f7574282866756e6374696f6e28297b61287b747970653a2274696d656f7574222c7461726765743a637d297d292c31326534293b632e6f6e6572726f723d632e6f6e6c6f61643d612c646f63756d656e742e686561642e617070656e644368696c642863297d72657475726e2050726f6d6973652e616c6c2865297d2c692e6d3d742c692e633d6e2c692e643d66756e6374696f6e28742c652c6e297b692e6f28742c65297c7c4f626a6563742e646566696e6550726f706572747928742c652c7b656e756d657261626c653a21302c6765743a6e7d297d2c692e723d66756e6374696f6e2874297b22756e646566696e656422213d747970656f662053796d626f6c262653796d626f6c2e746f537472696e6754616726264f626a6563742e646566696e6550726f706572747928742c53796d626f6c2e746f537472696e675461672c7b76616c75653a224d6f64756c65227d292c4f626a6563742e646566696e6550726f706572747928742c225f5f65734d6f64756c65222c7b76616c75653a21307d297d2c692e743d66756e6374696f6e28742c65297b696628312665262628743d69287429292c3826652972657475726e20743b6966283426652626226f626a656374223d3d747970656f6620742626742626742e5f5f65734d6f64756c652972657475726e20743b766172206e3d4f626a6563742e637265617465286e756c6c293b696628692e72286e292c4f626a6563742e646566696e6550726f7065727479286e2c2264656661756c74222c7b656e756d657261626c653a21302c76616c75653a747d292c322665262622737472696e6722213d747970656f66207429666f7228766172207220696e207429692e64286e2c722c66756e6374696f6e2865297b72657475726e20745b655d7d2e62696e64286e756c6c2c7229293b72657475726e206e7d2c692e6e3d66756e6374696f6e2874297b76617220653d742626742e5f5f65734d6f64756c653f66756e6374696f6e28297b72657475726e20742e64656661756c747d3a66756e6374696f6e28297b72657475726e20747d3b72657475726e20692e6428652c2261222c65292c657d2c692e6f3d66756e6374696f6e28742c65297b72657475726e204f626a6563742e70726f746f747970652e6861734f776e50726f70657274792e63616c6c28742c65297d2c692e703d22222c692e6f653d66756e6374696f6e2874297b7468726f7720636f6e736f6c652e6572726f722874292c747d3b766172206f3d77696e646f772e7765627061636b4a736f6e703d77696e646f772e7765627061636b4a736f6e707c7c5b5d2c613d6f2e707573682e62696e64286f293b6f2e707573683d652c6f3d6f2e736c69636528293b666f722876617220633d303b633c6f2e6c656e6774683b632b2b2965286f5b635d293b76617220733d613b6928692e733d333830297d285b66756e6374696f6e28742c652c6e297b2275736520737472696374223b6e2e6428652c226a222c2866756e6374696f6e28297b72657475726e20546e7d29292c6e2e6428652c2271222c2866756e6374696f6e28297b72657475726e20776e7d29292c6e2e6428652c2274222c2866756e6374696f6e28297b72657475726e20536e7d29292c6e2e6428652c227763222c2866756e6374696f6e28297b72657475726e206b6e7d29292c6e2e6428652c2270222c2866756e6374696f6e28297b72657475726e204f6e7d29292c6e2e6428652c226f222c2866756e6374696f6e28297b72657475726e204c6e7d29292c6e2e6428652c226e222c2866756e6374696f6e28297b72657475726e20416e7d29292c6e2e6428652c224162222c2866756e6374696f6e28297b72657475726e2054747d29292c6e2e6428652c224f222c2866756e6374696f6e28297b72657475726e2052747d29292c6e2e6428652c227462222c2866756e6374696f6e28297b72657475726e206b747d29292c6e2e6428652c227062222c2866756e6374696f6e28297b72657475726e2049747d29292c6e2e6428652c226d222c2866756e6374696f6e28297b72657475726e2078747d29292c6e2e6428652c227662222c2866756e6374696f6e28297b72657475726e2046747d29292c6e2e6428652c226a62222c2866756e6374696f6e28297b72657475726e204e747d29292c6e2e6428652c226162222c2866756e6374696f6e28297b72657475726e2050747d29292c6e2e6428652c227962222c2866756e6374696f6e28297b72657475726e2042747d29292c6e2e6428652c226962222c2866756e6374696f6e28297b72657475726e2047747d29292c6e2e6428652c226862222c2866756e6374696f6e28297b72657475726e207a747d29292c6e2e6428652c226462222c2866756e6374696f6e28297b72657475726e20727d29292c6e2e6428652c226362222c2866756e6374696f6e28297b72657475726e20697d29292c6e2e6428652c225a222c2866756e6374696f6e28297b72657475726e206c7d29292c6e2e6428652c2249222c2866756e6374696f6e28297b72657475726e20647d29292c6e2e6428652c224e222c2866756e6374696f6e28297b72657475726e20707d29292c6e2e6428652c2245222c2866756e6374696f6e28297b72657475726e20667d29292c6e2e6428652c2244222c2866756e6374696f6e28297b72657475726e20687d29292c6e2e6428652c2256222c2866756e6374696f6e28297b72657475726e20677d29292c6e2e6428652c2257222c2866756e6374696f6e28297b72657475726e20627d29292c6e2e6428652c2254222c2866756e6374696f6e28297b72657475726e206d7d29292c6e2e6428652c2255222c2866756e6374696f6e28297b72657475726e20767d29292c6e2e6428652c224c222c2866756e6374696f6e28297b72657475726e20797d29292c6e2e6428652c224d222c2866756e6374696f6e28297b72657475726e204f7d29292c6e2e6428652c2253222c2866756e6374696f6e28297b72657475726e20777d29292c6e2e6428652c2252222c2866756e6374696f6e28297b72657475726e205f7d29292c6e2e6428652c224a222c2866756e6374696f6e28297b72657475726e20547d29292c6e2e6428652c2250222c2866756e6374696f6e28297b72657475726e20457d29292c6e2e6428652c2251222c2866756e6374696f6e28297b72657475726e206a7d29292c6e2e6428652c2275222c2866756e6374696f6e28297b72657475726e20537d29292c6e2e6428652c2246222c2866756e6374696f6e28297b72657475726e204c7d29292c6e2e6428652c2247222c2866756e6374696f6e28297b72657475726e20417d29292c6e2e6428652c2277222c2866756e6374696f6e28297b72657475726e206b7d29292c6e2e6428652c2242222c2866756e6374696f6e28297b72657475726e20497d29292c6e2e6428652c226f62222c2866756e6374696f6e28297b72657475726e20447d29292c6e2e6428652c2248222c2866756e6374696f6e28297b72657475726e20787d29292c6e2e6428652c224262222c2866756e6374696f6e28297b72657475726e20527d29292c6e2e6428652c2278222c2866756e6374696f6e28297b72657475726e204d7d29292c6e2e6428652c2279222c2866756e6374696f6e28297b72657475726e20467d29292c6e2e6428652c227a222c2866756e6374696f6e28297b72657475726e204e7d29292c6e2e6428652c2241222c2866756e6374696f6e28297b72657475726e20507d29292c6e2e6428652c226e62222c2866756e6374696f6e28297b72657475726e20427d29292c6e2e6428652c2259222c2866756e6374696f6e28297b72657475726e20567d29292c6e2e6428652c2258222c2866756e6374696f6e28297b72657475726e20487d29292c6e2e6428652c227362222c2866756e6374696f6e28297b72657475726e20557d29292c6e2e6428652c224362222c2866756e6374696f6e28297b72657475726e20637d29292c6e2e6428652c226762222c2866756e6374696f6e28297b72657475726e20737d29292c6e2e6428652c227562222c2866756e6374696f6e28297b72657475726e20757d29292c6e2e6428652c2243222c2866756e6374696f6e28297b72657475726e20577d29292c6e2e6428652c2262222c2866756e6374696f6e28297b72657475726e20477d29292c6e2e6428652c226562222c2866756e6374696f6e28297b72657475726e207a7d29292c6e2e6428652c224b222c2866756e6374696f6e28297b72657475726e20597d29292c6e2e6428652c2272222c2866756e6374696f6e28297b72657475726e20587d29292c6e2e6428652c227862222c2866756e6374696f6e28297b72657475726e204b7d29292c6e2e6428652c226c222c2866756e6374696f6e28297b72657475726e20517d29292c6e2e6428652c225162222c2866756e6374696f6e28297b72657475726e2069747d29292c6e2e6428652c2267222c2866756e6374696f6e28297b72657475726e206f747d29292c6e2e6428652c2265222c2866756e6374696f6e28297b72657475726e206e747d29292c6e2e6428652c2276222c2866756e6374696f6e28297b72657475726e2063747d29292c6e2e6428652c2264222c2866756e6374696f6e28297b72657475726e2073747d29292c6e2e6428652c2263222c2866756e6374696f6e28297b72657475726e2075747d29292c6e2e6428652c2266222c2866756e6374696f6e28297b72657475726e2061747d29292c6e2e6428652c226d62222c2866756e6374696f6e28297b72657475726e2064747d29292c6e2e6428652c227a62222c2866756e6374696f6e28297b72657475726e2070747d29292c6e2e6428652c226b62222c2866756e6374696f6e28297b72657475726e2079747d29292c6e2e6428652c226c62222c2866756e6374696f6e28297b72657475726e2045747d29292c6e2e6428652c224862222c2866756e6374696f6e28297b72657475726e2053747d29292c6e2e6428652c2269222c2866756e6374696f6e28297b72657475726e204c747d29292c6e2e6428652c227262222c2866756e6374696f6e28297b72657475726e2041747d29292c6e2e6428652c227762222c2866756e6374696f6e28297b72657475726e204e6e7d29292c6e2e6428652c226763222c2866756e6374696f6e28297b72657475726e2063657d29292c6e2e6428652c226e63222c2866756e6374696f6e28297b72657475726e206a657d29292c6e2e6428652c227363222c2866756e6374696f6e28297b72657475726e2052657d29292c6e2e6428652c224a62222c2866756e6374696f6e28297b72657475726e204d657d29292c6e2e6428652c224962222c2866756e6374696f6e28297b72657475726e2046657d29292c6e2e6428652c224762222c2866756e6374696f6e28297b72657475726e204e657d29292c6e2e6428652c224b62222c2866756e6374696f6e28297b72657475726e2042657d29292c6e2e6428652c226662222c2866756e6374696f6e28297b72657475726e2056657d29292c6e2e6428652c226563222c2866756e6374696f6e28297b72657475726e2048657d29292c6e2e6428652c225a62222c2866756e6374696f6e28297b72657475726e2071657d29292c6e2e6428652c224e62222c2866756e6374696f6e28297b72657475726e2058657d29292c6e2e6428652c225562222c2866756e6374696f6e28297b72657475726e204b657d29292c6e2e6428652c225062222c2866756e6374696f6e28297b72657475726e20746e7d29292c6e2e6428652c225962222c2866756e6374696f6e28297b72657475726e205a657d29292c6e2e6428652c224f62222c2866756e6374696f6e28297b72657475726e20656e7d29292c6e2e6428652c226163222c2866756e6374696f6e28297b72657475726e2024657d29292c6e2e6428652c224562222c2866756e6374696f6e28297b72657475726e205f657d29292c6e2e6428652c227263222c2866756e6374696f6e28297b72657475726e206d657d29292c6e2e6428652c226263222c2866756e6374696f6e28297b72657475726e2076657d29292c6e2e6428652c226463222c2866756e6374696f6e28297b72657475726e204a747d29292c6e2e6428652c226d63222c2866756e6374696f6e28297b72657475726e2059747d29292c6e2e6428652c227463222c2866756e6374696f6e28297b72657475726e2024747d29292c6e2e6428652c225862222c2866756e6374696f6e28297b72657475726e20616e7d29292c6e2e6428652c224662222c2866756e6374696f6e28297b72657475726e20636e7d29292c6e2e6428652c225762222c2866756e6374696f6e28297b72657475726e2055657d29292c6e2e6428652c227663222c2866756e6374696f6e28297b72657475726e20756e7d29292c6e2e6428652c227563222c2866756e6374696f6e28297b72657475726e206c6e7d29292c6e2e6428652c226f63222c2866756e6374696f6e28297b72657475726e20646e7d29292c6e2e6428652c227063222c2866756e6374696f6e28297b72657475726e20706e7d29292c6e2e6428652c224462222c2866756e6374696f6e28297b72657475726e20676e7d29292c6e2e6428652c227163222c2866756e6374696f6e28297b72657475726e20626e7d29292c6e2e6428652c2268222c2866756e6374696f6e28297b72657475726e2071747d29292c6e2e6428652c226863222c2866756e6374696f6e28297b72657475726e205a747d29292c6e2e6428652c224c62222c2866756e6374696f6e28297b72657475726e2051747d29292c6e2e6428652c224d62222c2866756e6374696f6e28297b72657475726e20436e7d29292c6e2e6428652c226b222c2866756e6374696f6e28297b72657475726e20556e7d29292c6e2e6428652c226963222c2866756e6374696f6e28297b72657475726e20476e7d29292c6e2e6428652c226262222c2866756e6374696f6e28297b72657475726e20446e7d29292c6e2e6428652c225662222c2866756e6374696f6e28297b72657475726e20786e7d29292c6e2e6428652c226b63222c2866756e6374696f6e28297b72657475726e20526e7d29292c6e2e6428652c227162222c2866756e6374696f6e28297b72657475726e2079657d29292c6e2e6428652c226c63222c2866756e6374696f6e28297b72657475726e204f657d29292c6e2e6428652c226363222c2866756e6374696f6e28297b72657475726e2077657d29292c6e2e6428652c225462222c2866756e6374696f6e28297b72657475726e206a6e7d29292c6e2e6428652c225362222c2866756e6374696f6e28297b72657475726e20246e7d29292c6e2e6428652c226663222c2866756e6374696f6e28297b72657475726e2065657d29292c6e2e6428652c2273222c2866756e6374696f6e28297b72657475726e2073657d29292c6e2e6428652c226a63222c2866756e6374696f6e28297b72657475726e2075657d29292c6e2e6428652c225262222c2866756e6374696f6e28297b72657475726e206c657d29292c6e2e6428652c2261222c2866756e6374696f6e28297b72657475726e20686e7d29293b6e2839292c6e2838292c6e2837293b76617220722c692c6f3d6e2831292c613d6e2833293b2166756e6374696f6e2874297b742e464c45585f53544152543d22666c65782d7374617274222c742e43454e5445523d2263656e746572222c742e464c45585f454e443d22666c65782d656e64222c742e53504143455f4245545745454e3d2273706163652d6265747765656e222c742e53504143455f41524f554e443d2273706163652d61726f756e64227d28727c7c28723d7b7d29292c66756e6374696f6e2874297b742e464c45585f53544152543d22666c65782d7374617274222c742e43454e5445523d2263656e746572222c742e464c45585f454e443d22666c65782d656e64227d28697c7c28693d7b7d29293b76617220632c732c752c6c3d3337352c643d312c703d3337352c663d3332302c683d34302c673d31302c623d31322c6d3d302c763d302c793d31322c4f3d3430302c773d312e322c5f3d302c433d5b2250696e6746616e6753432d526567756c6172222c224d6963726f736f6674205961486569222c2273616e732d7365726966225d2c543d435b305d2c453d722e53504143455f41524f554e442c6a3d722e464c45585f53544152542c533d692e464c45585f53544152542c4c3d2223313631383233222c413d2223314137334538222c6b3d227472616e73706172656e74222c493d312c443d302c783d302c523d222e35732065617365203073222c4d3d2223303030303030222c463d2223326139306437222c4e3d2272676261283235352c203235352c203235352c20302e3229222c503d302c423d302c563d226c656674222c483d5b5d2c553d7b70616464696e67546f703a302c70616464696e6752696768743a302c70616464696e67426f74746f6d3a302c70616464696e674c6566743a307d3b2166756e6374696f6e2874297b742e4155544f3d226175746f222c742e46495845443d226669786564222c742e464c45583d22666c6578227d28637c7c28633d7b7d29292c66756e6374696f6e2874297b742e4155544f3d226175746f222c742e46495845443d226669786564222c742e5343414c453d227363616c65222c742e464c45583d22666c6578227d28737c7c28733d7b7d29292c66756e6374696f6e2874297b742e44454641554c543d2230222c742e4142534f4c5554453d2231222c742e46495845443d2232227d28757c7c28753d7b7d29293b76617220472c7a2c573d22736f6c6964223b2166756e6374696f6e2874297b742e44454641554c543d2230222c742e484f52495a4f4e54414c3d2231222c742e564552544943414c3d2232222c742e485f414e445f563d2233227d28477c7c28473d7b7d29292c66756e6374696f6e2874297b742e4e4f4e453d22222c742e48313d224831222c742e48323d224832222c742e48333d224833222c742e48343d224834222c742e50313d225031222c742e50323d225032222c742e50333d225033227d287a7c7c287a3d7b7d29293b76617220582c4b2c593d7a2e4e4f4e453b2166756e6374696f6e2874297b742e504c41494e3d22706c61696e222c742e424f524445523d22626f72646572227d28587c7c28583d7b7d29292c66756e6374696f6e2874297b742e424f524445523d22626f72646572222c742e4241434b47524f554e445f434f4c4f523d226261636b67726f756e64436f6c6f72222c742e434f4e43555252454e544c593d22636f6e63757272656e746c79227d284b7c7c284b3d7b7d29293b766172204a2c242c712c5a2c513d323b6e283332292c6e283333293b66756e6374696f6e2074742874297b72657475726e2874743d2266756e6374696f6e223d3d747970656f662053796d626f6c26262273796d626f6c223d3d747970656f662053796d626f6c2e6974657261746f723f66756e6374696f6e2874297b72657475726e20747970656f6620747d3a66756e6374696f6e2874297b72657475726e207426262266756e6374696f6e223d3d747970656f662053796d626f6c2626742e636f6e7374727563746f723d3d3d53796d626f6c262674213d3d53796d626f6c2e70726f746f747970653f2273796d626f6c223a747970656f6620747d292874297d66756e6374696f0020000000000000056e2065742874297b72657475726e20766f696420303d3d3d74262628743d2131292c743f5b3236352c3236365d3a5b305d7d6574282130293b766172206e742c72743d3939392c69743d66756e6374696f6e2874297b696628226e756d626572223d3d747970656f662074297b696628743d3d3d72742972657475726e7b6c6162656c3a22e7ae97e889b2222c76616c75653a747d7d656c7365226f626a656374223d3d3d74742874292626742e76616c75653d3d3d7274262628742e6c6162656c3d22e68a95e694bee7abafe7ae97e889b2e580bc22293b72657475726e20747d2c6f743d7b534b49503a4f626a65637428612e772928312c34292c4150505f49434f4e3a4f626a65637428612e772928312c3232292c535441523a5b312c325d2c425554544f4e3a4f626a65637428612e772928312c37292e636f6e636174284f626a65637428612e77292831332c323929292c4445434f524154494f4e3a4f626a65637428612e772928312c3230292c464f4e545f46414d494c593a5b312c322c335d2c425554544f4e5f544558543a657428292c42475f434f4c4f523a5b312c325d2c42475f53544152545f434f4c4f523a5b312c322c332c342c352c362c375d2e636f6e636174287274292c42475f454e445f434f4c4f523a5b312c322c332c342c352c362c375d2e636f6e636174287274292c42544e5f414e494d4154494f4e3a5b312c322c332c345d2c544558545f49434f4e3a5b312c322c332c342c352c362c372c382c395d2c4e4f524d414c5f50454e44454e543a5b312c322c332c342c352c362c372c385d7d3b2166756e6374696f6e2874297b742e5553455f41544f4d5f464f4e545f46414d494c593d2275736541746f6d466f6e7446616d696c79222c742e5553455f41544f4d5f42475f434f4c4f523d2275736541746f6d4267436f6c6f72222c742e5553455f41544f4d5f42475f53544152545f434f4c4f523d2275736541746f6d42675374617274436f6c6f72222c742e5553455f41544f4d5f42475f454e445f434f4c4f523d2275736541746f6d4267456e64436f6c6f72222c742e5553455f41544f4d5f42544e5f414e494d4154494f4e3d2275736541746f6d42746e416e696d6174696f6e227d286e747c7c286e743d7b7d29293b7661722061742c63743d312c73743d302c75743d7b6c6162656c3a22e585a8e983a8222c76616c75653a73747d3b2166756e6374696f6e2874297b742e534b49503d22736b6970222c742e4150505f49434f4e3d2269636f6e222c742e535441523d2273746172222c742e425554544f4e3d22627574746f6e222c742e4445434f524154494f4e3d226465636f726174696f6e222c742e464f4e545f46414d494c593d22666f6e745f66616d696c79222c742e425554544f4e5f544558543d22627574746f6e5f74657874222c742e42475f434f4c4f523d226261636b67726f756e645f636f6c6f725f6964222c742e42475f53544152545f434f4c4f523d22646f776e6c6f61645f6261725f73746172745f636f6c6f725f6964222c742e42475f454e445f434f4c4f523d22646f776e6c6f61645f6261725f656e645f636f6c6f725f6964222c742e42544e5f414e494d4154494f4e3d22646f776e6c6f61645f616e696d5f6964222c742e544558545f49434f4e3d22746167222c742e4e4f524d414c5f50454e44454e543d226e6f726d616c2d70656e64656e74227d2861747c7c2861743d7b7d29293b766172206c742c64742c70742c66742c68742c67743d28284a3d7b7d295b6f742e464f4e545f46414d494c595b305d5d3d435b305d2c4a5b6f742e464f4e545f46414d494c595b315d5d3d435b315d2c4a5b6f742e464f4e545f46414d494c595b325d5d3d435b325d2c4a292c62743d2828243d7b7d295b6f742e42475f434f4c4f525b305d5d3d2223653166336662222c245b6f742e42475f434f4c4f525b315d5d3d2223666666666666222c24292c6d743d2828713d7b7d295b6f742e42475f53544152545f434f4c4f525b305d5d3d2223373343424643222c715b6f742e42475f53544152545f434f4c4f525b315d5d3d2223303063633563222c715b6f742e42475f53544152545f434f4c4f525b325d5d3d2223464631323539222c715b6f742e42475f53544152545f434f4c4f525b335d5d3d2223314137334538222c715b6f742e42475f53544152545f434f4c4f525b345d5d3d2223334639434637222c715b6f742e42475f53544152545f434f4c4f525b355d5d3d2223303039653230222c715b6f742e42475f53544152545f434f4c4f525b365d5d3d2223443231454646222c715b3939395d3d2223443231454646222c71292c76743d28285a3d7b7d295b6f742e42475f454e445f434f4c4f525b305d5d3d2223334639434637222c5a5b6f742e42475f454e445f434f4c4f525b315d5d3d2223303039653230222c5a5b6f742e42475f454e445f434f4c4f525b325d5d3d2223443231454646222c5a5b6f742e42475f454e445f434f4c4f525b335d5d3d2223373343424643222c5a5b6f742e42475f454e445f434f4c4f525b345d5d3d2223303063633563222c5a5b6f742e42475f454e445f434f4c4f525b355d5d3d2223464631323539222c5a5b6f742e42475f454e445f434f4c4f525b365d5d3d2223314137334538222c5a5b3939395d3d2223314137334538222c5a293b2166756e6374696f6e2874297b745b742e44454641554c543d2d315d3d2244454641554c54222c745b742e544558543d305d3d2254455854222c745b742e494d4147453d315d3d22494d414745222c745b742e564944454f3d325d3d22564944454f222c745b742e50524f50455254593d335d3d2250524f5045525459222c745b742e415544494f3d345d3d22415544494f227d2864747c7c2864743d7b7d29292c66756e6374696f6e2874297b745b742e414c4c3d2d315d3d22414c4c222c745b742e5354415449435f54454d504c4154453d305d3d225354415449435f54454d504c415445222c745b742e44594e414d49435f54454d504c4154453d315d3d2244594e414d49435f54454d504c415445222c745b742e454e44434152445f54454d504c4154453d325d3d22454e44434152445f54454d504c415445227d2870747c7c2870743d7b7d29292c66756e6374696f6e2874297b745b742e4150505f49434f4e3d305d3d224150505f49434f4e222c745b742e4150505f53435245454e3d315d3d224150505f53435245454e222c745b742e44594e414d49435f49434f4e3d325d3d2244594e414d49435f49434f4e222c745b742e44594e414d49435f494d4147453d335d3d2244594e414d49435f494d414745222c745b742e43414c435f434f4c4f523d345d3d2243414c435f434f4c4f52222c745b742e444e59414d49435f5449544c453d355d3d22444e59414d49435f5449544c45222c745b742e43414c435f4752414449454e545f434f4c4f523d395d3d2243414c435f4752414449454e545f434f4c4f52227d2866747c7c2866743d7b7d29292c66756e6374696f6e2874297b745b742e435245415445443d305d3d2243524541544544222c745b742e4f4e4c494e453d315d3d224f4e4c494e45222c745b742e4f46464c494e453d325d3d224f46464c494e45227d2868747c7c2868743d7b7d29293b7661722079742c4f742c77743d28286c743d7b7d295b68742e435245415445445d3d22e696b0e5bbba222c6c745b68742e4f4e4c494e455d3d22e4b88ae7babf222c6c745b68742e4f46464c494e455d3d22e4b88be7babf222c6c74293b2166756e6374696f6e2874297b742e444154413d226d6174657269616c43656e74657244617461222c742e42475f434f4c4f523d2262674d6174657269616c43656e74657243616c63436f6c6f72222c742e42475f434f4c4f525f534f555243453d2262674d6174657269616c43656e74657243616c63436f6c6f72536f75726365222c742e424f524445525f434f4c4f523d22626f726465724d6174657269616c43656e74657243616c63436f6c6f72222c742e424f524445525f434f4c4f525f534f555243453d22626f726465724d6174657269616c43656e74657243616c63436f6c6f72536f75726365222c742e544558545f434f4c4f523d22746578744d6174657269616c43656e74657243616c63436f6c6f72222c742e544558545f434f4c4f525f534f555243453d22746578744d6174657269616c43656e74657243616c63436f6c6f72536f75726365227d2879747c7c2879743d7b7d29292c66756e6374696f6e2874297b745b742e4e4f4e453d305d3d224e4f4e45222c745b742e494d4147453d315d3d22494d414745222c745b742e49434f4e3d325d3d2249434f4e227d284f747c7c284f743d7b7d29293b766172205f742c43742c54742c45743d2d3939392c6a743d7b7469746c65446174613a227469746c65222c696d616765446174613a22696d6167652e302e75726c222c696d61676547726f7570446174613a22696d616765222c766964656f446174613a22766964656f222c61707049636f6e3a2269636f6e222c627574746f6e546578743a22627574746f6e5f74657874222c6372656174697665546167733a2264796e616d69635f63726561746976652e63726561746976655f74616773222c7461626c65446174613a2264796e616d69635f63726561746976652e6c6976655f726f6f6d5f646174612e70726f647563745f696e666f732e302e70726f647563745f666f726d6174227d2c53743d2263726561746976655f74616773222c4c743d286e283430292c66756e6374696f6e2874297b66756e6374696f6e20652865297b766172206e3d742e63616c6c28746869732c224173796e63496d706f72744572726f7220222b65297c7c746869733b72657475726e206e2e6e616d653d224173796e63496d706f72744572726f72222c6e7d72657475726e204f626a656374286f2e642928652c74292c657d284572726f7229292c41743d66756e6374696f6e2874297b66756e6374696f6e20652865297b766172206e3d742e63616c6c28746869732c65297c7c746869733b72657475726e206e2e6e616d653d224d697373696e674b65794572726f72222c6e2e6d697373696e674b6579733d652c6e7d72657475726e204f626a656374286f2e642928652c74292c657d284572726f72293b2166756e6374696f6e2874297b742e546f703d22746f70222c742e4c6566743d226c656674222c742e52696768743d227269676874222c742e426f74746f6d3d22626f74746f6d222c742e496e6e65723d22696e6e6572222c742e4368616e67653d226368616e6765227d285f747c7c285f743d7b7d29292c66756e6374696f6e2874297b745b742e44454641554c543d305d3d2244454641554c54222c745b742e4e494748543d315d3d224e49474854227d2854747c7c2854743d7b7d29293b766172206b742c49742c44742c78742c52743d7b636e3a22222c656e3a22222c6a6170616e3a22222c6b6f7265613a22222c7a6848616e743a22222c74683a22222c76693a22222c69643a22222c72753a22222c66723a22222c64653a22222c69743a22222c65733a22222c68693a22222c70743a22222c61613a22222c6d793a22222c74723a22222c706c3a22227d3b2166756e6374696f6e2874297b742e535452455443483d2230222c742e5343524f4c4c593d2231227d286b747c7c286b743d7b7d29292c66756e6374696f6e2874297b742e564944454f5f4245484156494f523d2230222c742e43524541544956455f425249434b3d2231227d2849747c7c2849743d7b7d29292c66756e6374696f6e2874297b742e5553455f4c4546543d227573654c656674222c742e5553455f52494748543d227573655269676874222c742e5553455f544f503d22757365546f70222c742e5553455f424f54544f4d3d22757365426f74746f6d227d2844747c7c2844743d7b7d29292c66756e6374696f6e2874297b742e494d4147453d22696d616765222c742e4150505f49434f4e3d226170702d69636f6e222c742e494d4147455f434f5645523d22696d6167652d636f766572222c742e494d4147455f4c4f4e473d22696d6167652d6c6f6e67222c742e494d4147455f53504c4153483d22696d6167652d73706c617368222c742e494d4147455f5351554152453d22696d6167652d737175617265222c742e5354415449435f494d4147453d227374617469632d696d616765222c742e494d4147455f574944453d22696d6167652d77696465222c742e535052494e475f464553544956414c5f4445434f524154494f4e3d22737072696e672d666573746976616c2d6465636f726174696f6e2d62617365222c742e435553544f4d5f434f4d504f4e454e545f56455353454c3d22637573746f6d2d636f6d706f6e656e742d76657373656c222c742e56455353454c3d2276657373656c222c742e53434f52455f434f554e545f574954485f49434f4e3d2273636f7265436f756e745769746849636f6e222c742e4341524f5553454c5f56455353454c3d226361726f7573656c2d76657373656c227d2878747c7c2878743d7b7d29293b766172204d742c46743d22726f6f74222c4e743d36353533363b2166756e6374696f6e2874297b745b742e504152454e543d305d3d22504152454e54222c745b742e4c41594f55543d315d3d224c41594f5554222c745b742e504152454e545f52554c453d325d3d22504152454e545f52554c45222c745b742e4c41594f55545f47454e4552415445443d335d3d224c41594f55545f47454e455241544544227d284d747c7c284d743d7b7d29293b7661722050742c42742c56742c48742c55742c47742c7a743b2843743d7b7d295b4d742e504152454e545d3d22e788b6e6a8a1e69dbf222c43745b4d742e4c41594f55545d3d224c41594f5554222c43745b4d742e504152454e545f52554c455d3d22e788b6e6a8a1e69dbf28e8a784e58899efbc89222c43745b4d742e4c41594f55545f47454e4552415445445d3d224c41594f5554efbc88e887aae58aa8e7949fe68890efbc89223b2166756e6374696f6e2874297b745b742e4352454154453d315d3d22435245415445222c745b742e52554e4e494e473d325d3d2252554e4e494e47222c745b742e53544f503d335d3d2253544f50222c745b742e4e4f545f555345443d345d3d224e4f545f55534544222c745b742e544553543d31305d3d2254455354222c745b742e50454e44494e473d31315d3d2250454e44494e47222c745b742e4558504552494d454e543d31325d3d224558504552494d454e54227d2850747c7c2850743d7b7d29292c66756e6374696f6e2874297b742e435245415445443d22637265617465222c742e52554e4e494e473d2272756e6e696e67222c742e53544f503d2273746f70222c742e4e4f545f555345443d226e6f742075736564222c742e544553543d2274657374222c742e50454e44494e473d2270656e64696e67222c742e4558504552494d454e543d226578706572696d656e74227d2842747c7c2842743d7b7d29292c66756e6374696f6e2874297b745b742e4f564552534541533d315d3d224f56455253454153222c745b742e494e4c414e443d325d3d22494e4c414e44227d2856747c7c2856743d7b7d29292c66756e6374696f6e2874297b745b742e44594e414d49433d305d3d2244594e414d4943222c745b742e454e44434152443d315d3d22454e4443415244227d2848747c7c2848743d7b7d29292c66756e6374696f6e2874297b745b742e4e4f545f53544152543d355d3d224e4f545f5354415254227d2855747c7c2855743d7b7d29292c66756e6374696f6e2874297b742e44594e414d49435f494d4147453d2264796e616d69632d696d616765222c742e5354415449435f494d4147453d227374617469632d696d616765227d2847747c7c2847743d7b7d29292c66756e6374696f6e2874297b742e4e4f4e453d226e6f6e65222c742e46494c4c3d2266696c6c222c742e434f5645523d22636f766572222c742e434f4e5441494e3d22636f6e7461696e227d287a747c7c287a743d7b7d29293b6e283135292c6e28313636292c6e283138292c6e283139292c6e283132292c6e283630292c6e283632292c6e283330293b7661722057743d66756e6374696f6e28297b66756e6374696f6e20742874297b766f696420303d3d3d74262628743d54742e44454641554c54292c746869732e7468656d653d747d72657475726e20742e70726f746f747970652e657175616c73546f3d66756e6374696f6e2874297b72657475726e20746869732e7468656d653d3d3d742e7468656d657d2c742e70726f746f747970652e746f4a534f4e3d66756e6374696f6e28297b72657475726e7b7468656d653a746869732e7468656d657d7d2c747d28292c58743d7b7d2c4b743d7b7d3b66756e6374696f6e20597428742c65297b69662858745b745d297468726f77206e6577204572726f722822696e7374616e636520686173206578697374656422293b58745b745d3d657d66756e6374696f6e204a7428742c65297b766172206e3d58745b745d3b696628216e297b76617220723d4b745b745d3b69662865262628723d65292c2172297468726f77206e6577204572726f722822e6ada4e58d95e4be8be697a0e9bb98e8aea4e69e84e980a0e599a822293b6e3d6e657720722c58745b745d3d6e7d72657475726e206e7d66756e6374696f6e20247428742c65297b4b745b745d3d657d7661722071743d66756e6374696f6e28297b66756e6374696f6e207428297b746869732e5f7468656d655f3d54742e44454641554c542c746869732e5f64656661756c7456616c7565735f3d766f696420302c746869732e5f6564697461626c655f3d21312c746869732e6164416e616c79736973446174613d7b7d2c746869732e5f657874656e73696f6e5f3d7b7d7d72657475726e20742e70726f746f747970652e7365744164416e616c79736973446174613d66756e6374696f6e2874297b746869732e6164416e616c79736973446174613d4f626a656374286f2e6129284f626a656374286f2e6129287b7d2c746869732e6164416e616c7973697344617461292c74297d2c742e70726f746f747970652e6765744164416e616c79736973446174613d66756e6374696f6e28297b72657475726e20746869732e6164416e616c79736973446174617d2c4f626a6563742e646566696e6550726f706572747928742e70726f746f747970652c226973456469746f72222c7b6765743a66756e6374696f6e28297b72657475726e21317d2c656e756d657261626c653a21302c636f6e666967757261626c653a21307d292c4f626a6563742e646566696e6550726f706572747928742e70726f746f747970652c22706c6174666f726d222c7b6765743a66756e6374696f6e28297b76617220743b72657475726e206e756c6c3d3d3d28743d746869732e5f63726561746976655f297c7c766f696420303d3d3d743f766f696420303a742e706c6174666f726d7d2c656e756d657261626c653a21302c636f6e666967757261626c653a21307d292c4f626a6563742e646566696e6550726f706572747928742c226b6579222c7b6765743a66756e6374696f6e28297b72657475726e20746869732e5f6b65795f7d2c656e756d657261626c653a21302c636f6e666967757261626c653a21307d292c4f626a6563742e646566696e6550726f706572747928742e70726f746f747970652c226564697461626c65222c7b6765743a66756e6374696f6e28297b72657475726e20746869732e5f6564697461626c655f7d2c7365743a66756e6374696f6e2874297b746869732e5f6564697461626c655f3d747d2c656e756d657261626c653a21302c636f6e666967757261626c653a21307d292c4f626a6563742e646566696e6550726f706572747928742e70726f746f747970652c227468656d65222c7b6765743a66756e6374696f6e28297b72657475726e20746869732e5f7468656d655f7d2c7365743a66756e6374696f6e2874297b746869732e5f7468656d655f3d747d2c656e756d657261626c653a21302c636f6e666967757261626c653a2130",
	}

其中,前4条是请求数据,后7条是响应数据。

解析

帧结构

如何将这堆16进制数据解析成http2请求?
首先将16进制解码成原文,看原文是否有含义

	hexStr := "505249202a20485454502f322e300d0a0d0a534d0d0a0d0a"
	hexString, _ := hex.DecodeString(hexStr)
	fmt.Println("hexString is:", string(hexString))

能看出第一个数据是http2开头的数据
“PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n”
实际上,http2的第一条连接数据都是0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a,代表开始http2请求。
其他的16进制数据大部分解析出来是乱码,其实是二进制流。也有部分数据能解析出明文,这些应该是body的一部分。

RFC7540规定,帧的结构:
±----------------------------------------------+
| Length (24) |
±--------------±--------------±--------------+
| Type (8) | Flags (8) |
±±------------±--------------±------------------------------+
|R| Stream Identifier (31) |
+=+=============================================================+
| Frame Payload (0…) …
±--------------------------------------------------------------+
单位是bit,即一共24+8+8+1+31=72bit
即72/8=9byte
16进制2位才能表示1个byte,因此前18位都是帧结构中固定的数据。

解析数据

第一条数据

除开固定开头外,下一条数据为:
000006040000000000000401000000
1 0x000006 长度为24bit也就是6位16进制数,表示6byte,也就是12个16进制数。
2 0x04 接下来8bit也就是2位16进制数表示Type,根据对应表
±--------------±-----±-------------+
| Frame Type | Code | Section |
±--------------±-----±-------------+
| DATA | 0x0 | Section 6.1 |
| HEADERS | 0x1 | Section 6.2 |
| PRIORITY | 0x2 | Section 6.3 |
| RST_STREAM | 0x3 | Section 6.4 |
| SETTINGS | 0x4 | Section 6.5 |
| PUSH_PROMISE | 0x5 | Section 6.6 |
| PING | 0x6 | Section 6.7 |
| GOAWAY | 0x7 | Section 6.8 |
| WINDOW_UPDATE | 0x8 | Section 6.9 |
| CONTINUATION | 0x9 | Section 6.10 |
±--------------±-----±-------------+
可以看出0x4,是SETTINGS帧。看下SETTING帧的介绍:

A SETTINGS frame MUST be sent by both endpoints at the start of a connection and MAY be sent at any other time by either endpoint over the lifetime of the connection

也就是说,第二帧一定是SETTINGS帧,数据满足条件。接下来看setting的Flag定义。
3 0x00 接下来8bit也就是2位16进制数表示Flags, 由于类别是SETTINGS,直接看setting的flag相关:

SETTINGS frames always apply to a connection, never a single stream. The stream identifier for a SETTINGS frame MUST be zero (0x0)

表示setting帧总是用在连接中而不是单个数据流中,流标识符应该是0x0,HTTP/2中的SETTINGS帧的FLAGS字段为0x00时,表示该帧没有任何标志位被设置,即所有位都为零。这种情况下,SETTINGS帧的作用是用于传递端点(endpoint)的配置参数,但不触发任何特定的动作或行为。这样的帧通常用于在HTTP/2连接的初始阶段或连接期间的某些时候,用于协商和传递配置参数而不引起任何额外的操作
4 0x00000000接下来32bit(也就是8个16进制),32bit中第一位是R,剩余31bit是流标识符。

R: R: A reserved 1-bit field. The semantics of this bit are undefined, and the bit MUST remain unset (0x0) when sending and MUST be ignored when receiving.

这是1位的保留字段,必须设置为0x0,且必须接收时忽略

Stream Identifier:A stream identifier (see Section 5.1.1) expressed as an unsigned 31-bit integer. The value 0x0 is reserved for frames that are associated with the connection as a whole as opposed to an individual stream.

流标识符,暂时先不仔细看这个到底干嘛的,可以理解为一个标识,但是全是0应该有特殊含义,查阅文档发现:

Streams are identified with an unsigned 31-bit integer. Streams initiated by a client MUST use odd-numbered stream identifiers; those initiated by the server MUST use even-numbered stream identifiers. A stream identifier of zero (0x0) is used for connection control messages; the stream identifier of zero cannot be used to establish a new stream

当流标识符为0x0时,是用来连接控制的,也就是说没什么实际含义,那就先忽略。
5 0x000401000000内容,首先长度为0x0000006 也就是12个16进制数。那也就是这条数据剩余部分就是内容。查询setting帧内容含义。

±------------------------------+
| Identifier (16) |
±------------------------------±------------------------------+
| Value (32) |
±--------------------------------------------------------------+

可以看出setting帧内容是48bit,也就是12个16进制数。
Identifier (16)4个16进制数,0x0004,查询作用:

SETTINGS_INITIAL_WINDOW_SIZE (0x4): Indicates the sender’s initial
window size (in octets) for stream-level flow control. The
initial value is 2^16-1 (65,535) octets.
This setting affects the window size of all streams (see
Section 6.9.2).
Values above the maximum flow-control window size of 2^31-1 MUST
be treated as a connection error (Section 5.4.1) of type
FLOW_CONTROL_ERROR.

作用是设置初始窗口大小,值为:0x01000000,即16777216(in octets),以8字节为单位,即134,217,728字节

第二条数据

原数据为0x00000408000000000000ff0001
数据长度为0x0000048个16进制数。
Type为0x8 WINDOW_UPDATE
Flags为0x00, The WINDOW_UPDATE frame does not define any flags,WINDOW_UPDATE帧没有定义任何FLAGS,因此忽略
R+Stream Identifier:0x00000000, 无意义
值:0x00ff0001

The payload of a WINDOW_UPDATE frame is one reserved bit plus an
unsigned 31-bit integer indicating the number of octets that the
sender can transmit in addition to the existing flow-control window.
The legal range for the increment to the flow-control window is 1 to
2^31-1 (2,147,483,647) octets

1个保留位+32bit的字节数,表示流量控制窗口的大小,一般来说不需要处理,忽略

第三条数据

原数据为:0x00004f01050000000382049b60f1f460722d58d292d9531616a90b616c62b193a8e62afd107abf419644acad295649d0bd7350848d35ac93da930ceb90f4ff875886a8eb10649cbf50839bd9ab7a893f59d29ad86577d70f
长度:为0x00004f:表示79字节,即158个16进制数
Type:为0x01,即HEADERS
FLAGS:为0x05,能查询到的header flags定义有:

END_STREAM (0x1)
END_HEADERS (0x4)
PADDED (0x8)
PRIORITY (0x20)

0x05表示设置了END_STREAM (0x1)和END_HEADERS (0x4)两个FLAGS,END_STREAM (0x1)表示这个帧将会是这个请求的最后一个header帧,END_HEADERS (0x4)表示header已经传完了
流标识符:0x00000003流标识符,先不管
数据:0x82049b60f1f460722d58d292d9531616a90b616c62b193a8e62afd107abf419644acad295649d0bd7350848d35ac93da930ceb90f4ff875886a8eb10649cbf50839bd9ab7a893f59d29ad86577d70f:数据部分,直接hpack解析(hpack解析工具可以github上搜索,python的golang的工具都有),能解析到数据为:
[{:method GET false} {:path /obj/ad-pattern/renderer/package.json false} {:authority sf3-fe-tos.pglstatp-toutiao.com false} {:scheme https false} {cache-control no-cache false} {accept-encoding gzip false} {user-agent okhttp/3.9.1 false}]

第四条数据

原数据为0x000012040000000000000300000080000400010000000500ffffff0000040800000000007fff0000
长度:00001218字节,即36个16进制数
Type:0x04 SETTINGS
FLAGS:0x00无意义
流标识符:0x00000000无意义,忽略
内容:原本剩余的有:0x000300000080000400010000000500ffffff0000040800000000007fff0000,但根据长度定义,内容应该是0x000300000080000400010000000500ffffff,剩余的属于下一帧。
setting内容定义:

±------------------------------+
| Identifier (16) |
±------------------------------±------------------------------+
| Value (32) |
±--------------------------------------------------------------+

前面16bit,也就是8个2进制数是Identifier,标识符都先忽略
后面32bit,也就是16个2进制数是Value,0080000400010000000500ffffff

第四条数据_02

下一条数据是从上一条拆分出来的:
0x0000040800000000007fff0000
长度:0x000004 4字节,即8个16进制数
类型:0x08WINDOW_UPDATE
Flags:00
流标识符:00000000
值:7fff0000

第五条数据

原数据为0x000000040100000000
长度:0
类型:0x04setting
FLAGS:0x01 ACK
流标识符:00000000

第六条数据

与第五条数据相同

第七条数据_01

原数据为:
000423010400000003887685de5aa635455f8b1d75d0620d263d4c7441ea0f0d033338366196c361be9413ea5f29141004ca8066e32cdc13aa62d1bf7b8b84842d695b05443c86aa6f588aa47e561cc581c034f001408821ea496a4ad4c8df93ce6c1db1794d999b9f3f970cc782367fd860830f139be4c7f222882218630c6e4628df79a8c8e8de8e52048571e71afe7f6c96c361be9413ea5f29141004ca8066e322b827d4c5a37f408ef2b472124a9620c9395642469b5186df7b5c58f26f408bf2b75948b10649cbd4bebfaf9d29aee30c566aaa2d8b1a99905b3b96c5e3f492c8b9ec9981c8b5634a4b654c585aa42d85b18ac64ea398abf441ea408ef2b24e85a71a27589611c68a4a478e0bc003aeb4f05b138dbccb820362408cf2b24e85ac2f6b4a84ac693f9d78b292595e2b25009f7de95c6de2b2500961c8cc6ebeeac3232eb2c8bf408df2b24e85ac2a2b3d482ac9352596c361be9413ea5f29141004ca8066e32cdc1094c5a37f408df2b24e859093d8398ab1281a1187ddbe1d37e1db7f7ceda8410ac0742b05a0fd2841927289b5e8112a64227fff60fa07d0800581f58fff9f4a10649ca25e8112a64227fff6dfd03ff9f4a10649ca25e8112a64227fff6dfd03ff9f4a7720c9394205c953816d9ffd83e81f42001607d63ffe7d29dc8324e57d7254e05b67ff6173e81ffc4089f2b585ed6950958d5f8f9648e4b921001b8272e3217ae5c71c408af2b252b26c190ab24737963490019fb24952c419272c13993f69f5596042469313408cf2b5854567a9055886aa53ff8f9648e4b921001b8272e3217ae5c71c408bf2b5854567a905588324e5862c931629cc9f408a416cee5b1649a935537f9724952c419272fdc854120c7937fd16498bf725b640173f408bf2b252b26c190ab4e7427fff09004a2236eb608e40bb238291b6e5000658dc69d78028e375a8df1c850b6f46468523408d969c14836db6dc7de91b7c8410c9201f946dbf1824707211a788fb6090a01b32bedca22b32b858df91d7db2372048372421632b8e140f38365f032dbb1c607c8e082376378826872b4c81d92409051c82091f9060133200af0c4c81c74050b8495a13c2f4089f2b252b26c190ab1a4a900161321109f0859644ebf7afb4e5fbcddf742d0af5d71f0debab38079ac01770357d9c0ec37de58004088f2b252b50798d27f9a1004c84427c2165913afdebed397ef377dd0b42bd75c7c37aeff5a839bd9ab40921d06591e0d2a569a83c63a1640fb9526a4bf870ba065e101e03b0f068565b644f87f4085f2b10649cb9ac7937a9bef6b8b460d1163c9bd490d6557022b810b8eb6065917408cf2b23c1a54ac81f72a4d497f96df697e940094ca3a941004d28066e059b8cbea62d1bf408cf2b23c1a54ac419272a4d49785138065e7bf54012a408e49a935532c3a283f858f61a6355f012a408528e6a0a69392647248200801740d05d680fbc00842c8445f0001820000000000031f8b0800000000000003b493dd8edb201085df85ebd8e61f9c5759ad2af00c5927fe1310abda28fbec254aa366a5b657f10dd20ce8cc37e89c0b99dc88644f1c548bcb19e354459c002346b2232bc6d4cf53b96735ad1513a537bafed6f8c87949fba649415401ab3ca77a390c29bbbc94e29c7b37d7dd3c36b33f367fc49b877843a9d6de367d297fd61f791c8a74c4349f638789ecdf2ee41c8757cf39a6db02a08a6e07c2522b9c90c248635a6741486e02d75232a5597938e08a05815d779bc0fc5efa8e6399a7a8bd41cb5508b493d207e44081231861704b9cb5d4734c5fc35225383d7f92e83cb30ec083d242510bae05ebb9744160eb1d3c53bdef4870c3e05d777a1dda43f10ef5a87ecc4beec7fe13b71a84d3a19f6e36bc9055dcce7fa7a45ac5b7a0881214c65f9693225f654cb9b9eb6e9e97ffcebb9bc241a05e8696794d191a6f5971456885a4de688d6a0babfe1debc9a91218b742b9d6b69da7b2e4990372c5997220b895df9c7abd5e7f010000ffff03001ed95fc7f9040000

长度:0x000423,1059byte, 2018个16进制数
类型: 0x01 HEADERS
FLAGS: 0x04:END_HEADERS, 而这个数据是响应里的数据,意思是响应头就这一条
流标识符:0x00000003
数据:887685de5aa635455f8b1d75d0620d263d4c7441ea0f0d033338366196c361be9413ea5f29141004ca8066e32cdc13aa62d1bf7b8b84842d695b05443c86aa6f588aa47e561cc581c034f001408821ea496a4ad4c8df93ce6c1db1794d999b9f3f970cc782367fd860830f139be4c7f222882218630c6e4628df79a8c8e8de8e52048571e71afe7f6c96c361be9413ea5f29141004ca8066e322b827d4c5a37f408ef2b472124a9620c9395642469b5186df7b5c58f26f408bf2b75948b10649cbd4bebfaf9d29aee30c566aaa2d8b1a99905b3b96c5e3f492c8b9ec9981c8b5634a4b654c585aa42d85b18ac64ea398abf441ea408ef2b24e85a71a27589611c68a4a478e0bc003aeb4f05b138dbccb820362408cf2b24e85ac2f6b4a84ac693f9d78b292595e2b25009f7de95c6de2b2500961c8cc6ebeeac3232eb2c8bf408df2b24e85ac2a2b3d482ac9352596c361be9413ea5f29141004ca8066e32cdc1094c5a37f408df2b24e859093d8398ab1281a1187ddbe1d37e1db7f7ceda8410ac0742b05a0fd2841927289b5e8112a64227fff60fa07d0800581f58fff9f4a10649ca25e8112a64227fff6dfd03ff9f4a10649ca25e8112a64227fff6dfd03ff9f4a7720c9394205c953816d9ffd83e81f42001607d63ffe7d29dc8324e57d7254e05b67ff6173e81ffc4089f2b585ed6950958d5f8f9648e4b921001b8272e3217ae5c71c408af2b252b26c190ab24737963490019fb24952c419272c13993f69f5596042469313408cf2b5854567a9055886aa53ff8f9648e4b921001b8272e3217ae5c71c408bf2b5854567a905588324e5862c931629cc9f408a416cee5b1649a935537f9724952c419272fdc854120c7937fd16498bf725b640173f408bf2b252b26c190ab4e7427fff09004a2236eb608e40bb238291b6e5000658dc69d78028e375a8df1c850b6f46468523408d969c14836db6dc7de91b7c8410c9201f946dbf1824707211a788fb6090a01b32bedca22b32b858df91d7db2372048372421632b8e140f38365f032dbb1c607c8e082376378826872b4c81d92409051c82091f9060133200af0c4c81c74050b8495a13c2f4089f2b252b26c190ab1a4a900161321109f0859644ebf7afb4e5fbcddf742d0af5d71f0debab38079ac01770357d9c0ec37de58004088f2b252b50798d27f9a1004c84427c2165913afdebed397ef377dd0b42bd75c7c37aeff5a839bd9ab40921d06591e0d2a569a83c63a1640fb9526a4bf870ba065e101e03b0f068565b644f87f4085f2b10649cb9ac7937a9bef6b8b460d1163c9bd490d6557022b810b8eb6065917408cf2b23c1a54ac81f72a4d497f96df697e940094ca3a941004d28066e059b8cbea62d1bf408cf2b23c1a54ac419272a4d49785138065e7bf54012a408e49a935532c3a283f858f61a6355f012a408528e6a0a69392647248200801740d05d680fbc00842c8445f
从网上可以找到解析header的包,如python-hpack,go-hpack等都可以解析出来,这里的解析结果如下:

[{:status 200 false} {server Tengine false} {content-type application/json false} {content-length 386 false} {date Fri, 29 Dec 2023 03:33:27 GMT false} {vary Accept-Encoding false} {cache-control max-age=604800 fals
e} {content-md5 LiEqGxtrK5hLx6i/wc5oZA== false} {etag W/“2e212a1b1b6b2b984bc7a8bfc1ce6864” false} {last-modified Fri, 29 Dec 2023 03:32:29 GMT false} {x-bdcdn-cache-status TCP_HIT false} {x-kfc-cachekey http://pinner-imgserver.byted
.org/ad-pattern/renderer/package.json false} {x-tos-hash-crc64ecma 18007748152658362052 false} {x-tos-request-id 8efcff8e3e02998f658e3e02-ad3b797-ac37332 false} {x-tos-response-time Fri, 29 Dec 2023 03:33:22 GMT false} {x-tos-storag
e-class STANDARD false} {via n211-071-141, cache25.l2cn3129[0,0,200-0,H], cache2.l2cn3129[5,0], cache2.l2cn3129[5,0], vcache10.cn6153[0,0,200-0,H], vcache9.cn6153[16,0] false} {x-request-ip fdbd:dc01:26:318::66 false} {x-tt-trace-ta
g id=03;cdn-cache=hit;type=static false} {x-response-cinfo fdbd:dc01:26:318::66 false} {x-response-cache edge_hit false} {server-timing cdn-cache;desc=HIT,edge;dur=16 false} {x-tt-trace-host 01e2c5750bd17d62d55f00aeb647802bb74b9ade1
58bc42d40b3462da555698d59cc2acd09fa59b0d6adc48c950de0a3f95f2e3f6eb9d795c5d1ca6dcebe66e086a390357bb09c621a7b8c24af4307dd1c2bd21c9da023d0e8a230670e16cf4282 false} {x-tt-trace-id 00-2312291133279CD46DC5D7142CB691CB-6084E17E4D3E7AD8-00
false} {x-tt-logid 202312291133279CD46DC5D7142CB691CB false} {content-encoding gzip false} {ali-swift-global-savetime 1703820807 false} {age 353291 false} {x-cache HIT TCP_MEM_HIT dirn:12:116750332 false} {x-swift-savetime Tue, 02 Jan 2024 03:13:39 GMT false} {x-swift-cachetime 260388 false} {access-control-allow-origin * false} {timing-allow-origin * false} {eagleid 3add202017041740980111312e false}]

注意hpack的源码,当存储静态表时,需要把数据存到缓存或者数据库中,否则下次查静态表可能缺失数据或数据不准确!!!
注意这条数据按照长度算还有一堆数据超出length,要切割到下一条

第七条数据_02

上一条数据根据长度裁剪后还剩下一部分,应该是单独的数据帧。
值为:0x0001820000000000031f8b0800000000000003b493dd8edb201085df85ebd8e61f9c5759ad2af00c5927fe1310abda28fbec254aa366a5b657f10dd20ce8cc37e89c0b99dc88644f1c548bcb19e354459c002346b2232bc6d4cf53b96735ad1513a537bafed6f8c87949fba649415401ab3ca77a390c29bbbc94e29c7b37d7dd3c36b33f367fc49b877843a9d6de367d297fd61f791c8a74c4349f638789ecdf2ee41c8757cf39a6db02a08a6e07c2522b9c90c248635a6741486e02d75232a5597938e08a05815d779bc0fc5efa8e6399a7a8bd41cb5508b493d207e44081231861704b9cb5d4734c5fc35225383d7f92e83cb30ec083d242510bae05ebb9744160eb1d3c53bdef4870c3e05d777a1dda43f10ef5a87ecc4beec7fe13b71a84d3a19f6e36bc9055dcce7fa7a45ac5b7a0881214c65f9693225f654cb9b9eb6e9e97ffcebb9bc241a05e8696794d191a6f5971456885a4de688d6a0babfe1debc9a91218b742b9d6b69da7b2e4990372c5997220b895df9c7abd5e7f010000ffff03001ed95fc7f9040000
长度:0x000182
类型:0x00 DATA
FLAGS: 0x00
流标识符:0x00000003
数据:0001820000000000031f8b0800000000000003b493dd8edb201085df85ebd8e61f9c5759ad2af00c5927fe1310abda28fbec254aa366a5b657f10dd20ce8cc37e89c0b99dc88644f1c548bcb19e354459c002346b2232bc6d4cf53b96735ad1513a537bafed6f8c87949fba649415401ab3ca77a390c29bbbc94e29c7b37d7dd3c36b33f367fc49b877843a9d6de367d297fd61f791c8a74c4349f638789ecdf2ee41c8757cf39a6db02a08a6e07c2522b9c90c248635a6741486e02d75232a5597938e08a05815d779bc0fc5efa8e6399a7a8bd41cb5508b493d207e44081231861704b9cb5d4734c5fc35225383d7f92e83cb30ec083d242510bae05ebb9744160eb1d3c53bdef4870c3e05d777a1dda43f10ef5a87ecc4beec7fe13b71a84d3a19f6e36bc9055dcce7fa7a45ac5b7a0881214c65f9693225f654cb9b9eb6e9e97ffcebb9bc241a05e8696794d191a6f5971456885a4de688d6a0babfe1debc9a91218b742b9d6b69da7b2e4990372c5997220b895df9c7abd5e7f010000ffff03001ed95fc7f9040000
这些数据直接解析为明文解析不出来,回看前文的header信息,{content-encoding gzip false},出现了content-encoding值为gzip,说明内容可能经过gzip压缩。
于是将数据直接写入gzip文件,示例:

package main

import (
	"code.avlyun.org/hexiaojiao/gindemo/index/hpack/hpack"
	"encoding/base64"
	"encoding/hex"
	"encoding/json"
	"errors"
	"fmt"
	"os"
	"strconv"
)

func main() {
	ParseHttp2Hex("0001820000000000031f8b0800000000000003b493dd8edb201085df85ebd8e61f9c5759ad2af00c5927fe1310abda28fbec254aa366a5b657f10dd20ce8cc37e89c0b99dc88644f1c548bcb19e354459c002346b2232bc6d4cf53b96735ad1513a537bafed6f8c87949fba649415401ab3ca77a390c29bbbc94e29c7b37d7dd3c36b33f367fc49b877843a9d6de367d297fd61f791c8a74c4349f638789ecdf2ee41c8757cf39a6db02a08a6e07c2522b9c90c248635a6741486e02d75232a5597938e08a05815d779bc0fc5efa8e6399a7a8bd41cb5508b493d207e44081231861704b9cb5d4734c5fc35225383d7f92e83cb30ec083d242510bae05ebb9744160eb1d3c53bdef4870c3e05d777a1dda43f10ef5a87ecc4beec7fe13b71a84d3a19f6e36bc9055dcce7fa7a45ac5b7a0881214c65f9693225f654cb9b9eb6e9e97ffcebb9bc241a05e8696794d191a6f5971456885a4de688d6a0babfe1debc9a91218b742b9d6b69da7b2e4990372c5997220b895df9c7abd5e7f010000ffff03001ed95fc7f9040000")
}

func ParseHttp2Hex(hexStr string) {
	// 字符串转16进制
	hexString, _ := hex.DecodeString(hexStr)
	fmt.Println("", string(hexString))
	if len(hexStr) >= 6 {
		frameLenResult, _ := slicePreStr(6, hexStr)
		frameLen, _ := strconv.ParseInt(frameLenResult, 16, 64)

		frameTypeResult, _ := sliceStr(7, 8, hexStr)
		frameType, _ := strconv.ParseInt(frameTypeResult, 16, 64)

		frameFlagResult, _ := sliceStr(9, 10, hexStr)
		frameFlag, _ := strconv.ParseInt(frameFlagResult, 16, 64)

		streamIdentifierResult, _ := getSliceLen(10, 8, hexStr)
		streamIdentifier, _ := strconv.ParseInt(streamIdentifierResult, 16, 64)

		contLen := int(frameLen) * 2
		contResult, _ := getSliceLen(18, contLen, hexStr)

		fmt.Println("________0___origin__", hexStr)
		fmt.Println("________1___frameLen__", frameLen)
		fmt.Println("________2___frameType__", frameType)
		fmt.Println("________3___frameFlag__", frameFlag)
		fmt.Println("________4___streamIdentifier__", streamIdentifier)
		fmt.Println("________5___cont__", contResult)
		if frameType == 0 {
			dataDecode(contResult)
		} else if frameType == 1 || frameType == 2 {
			headerDecode([]string{contResult})
		}
	} else {
		fmt.Println("n 超过了原始字符串的长度")
	}
}

func headerDecode(encodedHexValues []string) {
	decoder := hpack.NewDecoder(2560)
	decoder.SetDynamicTableMaxSize(2560)
	for _, encodedHex := range encodedHexValues {
		encoded := make([]byte, len(encodedHex)/2)
		_, err := hex.Decode(encoded, []byte(encodedHex))
		if err != nil {
			fmt.Println("_________1______", err)
		}
		headers, err := decoder.Decode(encoded)
		if err != nil {
			fmt.Println("_________2______", err)
		}
		headersJson, _ := json.Marshal(headers)
		showDataStr := base64.StdEncoding.EncodeToString(headersJson)

		fmt.Println("____base64__", showDataStr)
		fmt.Println("_________3______", headers)
	}
}

func dataDecode(dataHex string) {
	data, _ := hex.DecodeString(dataHex)
	WriteFile(data, "test1.gz")
}

// WriteFile 写入文件
func WriteFile(data []byte, fileName string) error {
	dstFile, err := os.Create(fileName)
	if err != nil {
		fmt.Println(err.Error())
		return err
	}
	defer dstFile.Close()
	dstFile.WriteString(string(data))
	return nil
}

// slicePreStr 截取字符串前n位
func slicePreStr(n int, originalString string) (str string, err error) {
	if n <= len(originalString) {
		return originalString[:n], nil
	} else {
		return "", errors.New("无效的长度")
	}
}

// sliceStr 截取字符串第m到第n位
func sliceStr(m int, n int, originalString string) (str string, err error) {
	if m >= 0 && n <= len(originalString) && m <= n {
		return originalString[m:n], nil
	} else {
		return "", errors.New("无效的长度")
	}
}

// getSliceLen 从第startIndex位开始,截取长度为length的子字符串
func getSliceLen(startIndex int, length int, originalString string) (substring string, err error) {
	if startIndex >= 0 && startIndex < len(originalString) && (startIndex+length) <= len(originalString) {
		return originalString[startIndex : startIndex+length], nil
	} else {
		return "", errors.New("无效的startIndex或length值")
	}
}

解压gzip文件得到数据内容为:
{"name":"ad-pattern-renderer","version":"1.0.513","main":"https://sf3-fe-tos.pglstatp-toutiao.com/obj/ad-pattern/renderer/0066b8/index.html","resources":[{"url":"https://sf3-fe-tos.pglstatp-toutiao.com/obj/ad-pattern/renderer/0066b8/index.js","md5":"cd38083a34374779a8d3427f26441561","level":1},{"url":"https://sf3-fe-tos.pglstatp-toutiao.com/obj/ad-pattern/renderer/0066b8/index.html","md5":"81b0e6b7e825ff0c44bfe2d0d2ed737e","level":1},{"url":"https://sf3-fe-tos.pglstatp-toutiao.com/obj/ad-pattern/renderer/0066b8/vendors~lp-sdk.js","md5":"3cb18addbd563508da9d8b24af3e9bad","level":1}],"fallback":"https://sf3-fe-tos.pglstatp-toutiao.com/obj/ad-pattern/renderer/0066b8/fallback.js","fallback_optimize":"https://sf3-fe-tos.pglstatp-toutiao.com/obj/ad-pattern/renderer/0066b8/fallback.js","engines":{"v3":{"name":"ad-pattern-renderer-v3","version":"3.0.12","main":"https://sf3-fe-tos.pglstatp-toutiao.com/obj/ad-pattern/renderer-v3-test/3.0.12/index.html","resources":[{"url":"https://sf3-fe-tos.pglstatp-toutiao.com/obj/ad-pattern/renderer-v3-test/3.0.12/index.html","md5":"adf0b4f91b601e7b81a9df9340b766e5","level":1},{"url":"https://sf3-fe-tos.pglstatp-toutiao.com/obj/ad-pattern/renderer-v3-test/3.0.12/index.js","md5":"4d12835a989cb0479a2de25215ad3284","level":1}]}}}

第八条数据

000000000100000003
长度:0
类型:0x0DATA
FLAGS: 01:

END_STREAM (0x1): When set, bit 0 indicates that this frame is the
last that the endpoint will send for the identified stream.
Setting this flag causes the stream to enter one of the “half-
closed” states or the “closed” state (Section 5.1).

第九条数据

00002b01050000000582049d60f1f460722d58d292d9531616a90b616c600071c8de60d5485f2bf447c18772868fd24a8800b7bf
长度:0x00002b:43byte
类型:HEADER
FLAGS:0x05
流标识符:0x00000005
值:0x82049d60f1f460722d58d292d9531616a90b616c600071c8de60d5485f2bf447c18772868fd24a8800b7bf
这里值如果直接hpack解析是解析不出来的,因为中间有部分数据读的动态表,因此必须动态表存储过才能解析。
静态表的长度为61,具体的看下rfc7541Static Table Definition部分。加上之前的34条要写入动态表的数据,这里才能解析。
能拿到内容为:

[{:method GET false} {:path /obj/ad-pattern/renderer/0066b8/index.js false} {content-length 386 false} {:scheme https false} {range bytes=0- false} {server Tengine false}]

第十条数据

第十条数据比较长,原文已写在开头。依然是一堆header,需要读取静态表和动态表,然后拆分后还有一堆DATA内容,是gzip的,解析过程省略。

  • 24
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值