mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-26 18:18:25 +00:00
http2: fix unhandled frames
This commit is contained in:
parent
a0f3803233
commit
bde4bdd1d2
@ -7,7 +7,7 @@ from netlib import odict
|
||||
from netlib.tcp import NetLibError, Address
|
||||
from netlib.http.http1 import HTTP1Protocol
|
||||
from netlib.http.http2 import HTTP2Protocol
|
||||
from netlib.http.http2.frame import Frame, GoAwayFrame, PriorityFrame, WindowUpdateFrame
|
||||
from netlib.http.http2.frame import Frame, PingFrame, GoAwayFrame, PriorityFrame, WindowUpdateFrame
|
||||
|
||||
from .. import utils
|
||||
from ..exceptions import InvalidCredentials, HttpException, ProtocolException
|
||||
@ -193,6 +193,13 @@ class Http2Layer(_HttpLayer):
|
||||
self.client_conn.send(GoAwayFrame().to_bytes())
|
||||
|
||||
def handle_unexpected_frame_from_client(self, frame):
|
||||
if isinstance(frame, WindowUpdateFrame):
|
||||
# Clients are sending WindowUpdate frames depending on their flow control algorithm.
|
||||
# Since we cannot predict these frames, and we do not need to respond to them,
|
||||
# simply accept them, and hide them from the log.
|
||||
# Ideally we should keep track of our own flow control window and
|
||||
# stall transmission if the outgoing flow control buffer is full.
|
||||
return
|
||||
if isinstance(frame, PriorityFrame):
|
||||
# Clients are sending Priority frames depending on their implementation.
|
||||
# The RFC does not clearly state when or which priority preferences should be set.
|
||||
@ -207,13 +214,6 @@ class Http2Layer(_HttpLayer):
|
||||
self.log("Unexpected HTTP2 Frame: %s" % frame.human_readable(), "info")
|
||||
|
||||
def handle_unexpected_frame_from_server(self, frame):
|
||||
if isinstance(frame, WindowUpdateFrame):
|
||||
# Clients are sending WindowUpdate frames depending on their flow control algorithm.
|
||||
# Since we cannot predict these frames, and we do not need to respond to them,
|
||||
# simply accept them, and hide them from the log.
|
||||
# Ideally we should keep track of our own flow control window and
|
||||
# stall transmission if the outgoing flow control buffer is full.
|
||||
return
|
||||
if isinstance(frame, GoAwayFrame):
|
||||
# Server wants to terminate the connection,
|
||||
# relay it to the client.
|
||||
|
Loading…
Reference in New Issue
Block a user