我正在使用HTTP2客户端/服务器实现,而且我遇到了protocol_error
,但我不确定原因。
Received frame: {:length=>18, :type=>:settings, :flags=>[], :stream=>0, :payload=>[[:settings_max_concurrent_streams, 128], [:settings_initial_window_size, 65536], [:settings_max_frame_size, 16777215]]}
Sent frame: {:type=>:settings, :stream=>0, :payload=>[], :flags=>[:ack]}
Received frame: {:length=>4, :type=>:window_update, :flags=>[], :stream=>0, :increment=>2147418112}
Sent frame: {:type=>:headers, :flags=>[:end_headers, :end_stream], :payload=>{":scheme"=>"https", ":method"=>"GET", ":path"=>"/index", ":authority"=>"www.example.com"}, :stream=>1}
Received frame: {:length=>8, :type=>:goaway, :flags=>[], :stream=>0, :last_stream=>0, :error=>:protocol_error}
我几乎可以肯定这是流ID的问题,但我对HTTP2协议并不陌生,所以我实际上不确定出了什么问题或为什么我&#39 ; m得到协议错误。
答案 0 :(得分:1)
我猜是因为你没有发送你的设置框架 - 你只是确认了服务器设置框架。
设置帧必须由连接开始时的两个端点发送
确认设置帧数吗?
然而this section声明:
此序列必须后跟SETTINGS框(第6.5节),该框可能为空。 ... 作为连接前言的一部分从对等端收到的SETTINGS帧必须在发送连接前言后进行确认(参见6.5.3节)。
因此,我必须发送您的设置框,然后确认服务器设置框架。
答案 1 :(得分:0)
尝试使用标记“chrome.exe --disable-http2”,如果它与http2协议错误有关,它将会消失。