You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
It seems that http2 servers fail to respect the table size settings sent by the client. This issue manifested for us as a 502 error from an nginx ingress controller in kubernetes, sitting in front of a grpc server written with mu-grpc-server.
To reproduce, I used the example server in the http2 library code:
{-# LANGUAGE OverloadedStrings #-}
moduleMainwhereimportqualifiedControl.ExceptionasEimportData.ByteString.Builder (byteString)
importNetwork.HTTP.Types (ok200)
importNetwork.HTTP2.ServerimportNetwork.Run.TCP (runTCPServer)
main::IO()
main = runTCPServer Nothing"50051" runHTTP2Server
where
runHTTP2Server s =E.bracket
(allocSimpleConfig s 4096)
freeSimpleConfig
(\config -> run config server)
server _req _aux sendResponse = sendResponse response []where
response = responseBuilder ok200 header body
header =
[("Content-Type", "text/plain")]
body = byteString "Hello, world!\n"
and fed it this sequence of two requests. The requests contain GRPC invokations, but that is not relevant. There is a SETTINGS_HEADER_TABLE_SIZE frame with value 0 in the beginning, but the response I get for the second request has the following header fragment:
20 88 be
And be decodes to index 62, which is outside the static range (presumably, it is referring to the previously sent content-type header).
It seems that http2 servers fail to respect the table size settings sent by the client. This issue manifested for us as a 502 error from an nginx ingress controller in kubernetes, sitting in front of a grpc server written with mu-grpc-server.
To reproduce, I used the example server in the http2 library code:
and fed it this sequence of two requests. The requests contain GRPC invokations, but that is not relevant. There is a SETTINGS_HEADER_TABLE_SIZE frame with value 0 in the beginning, but the response I get for the second request has the following header fragment:
And
be
decodes to index 62, which is outside the static range (presumably, it is referring to the previously sent content-type header).This is a wireshark dump of the interaction.
The text was updated successfully, but these errors were encountered: