warp 3.2.24 → 3.2.25
raw patch · 5 files changed
+43/−14 lines, 5 files
Files
- ChangeLog.md +6/−0
- Network/Wai/Handler/Warp/HTTP2/HPACK.hs +29/−11
- Network/Wai/Handler/Warp/HTTP2/Sender.hs +1/−1
- test/ResponseHeaderSpec.hs +6/−1
- warp.cabal +1/−1
ChangeLog.md view
@@ -1,3 +1,9 @@+## 3.2.25++* Removing Connection: and Transfer-Encoding: from HTTP/2+ response header+ [#707](https://github.com/yesodweb/wai/pull/707)+ ## 3.2.24 * Fix HTTP2 unwanted GoAways on late WindowUpdate frames.
Network/Wai/Handler/Warp/HTTP2/HPACK.hs view
@@ -6,8 +6,9 @@ , hpackEncodeHeaderLoop , hpackDecodeHeader , just- , addNecessaryHeaders+ , fixHeaders , addHeader -- testing+ , deleteUnnecessaryHeaders ) where import qualified Control.Exception as E@@ -28,19 +29,18 @@ {-# INLINE addHeader #-} addHeader :: Token -> ByteString -> ValueTable -> TokenHeaderList -> TokenHeaderList-addHeader t "" tbl ths = case getHeaderValue t tbl of- Nothing -> ths- _ -> filter ((/= tokenServer) . fst) ths+addHeader t "" _ ths+ | t == tokenServer = filter ((/= tokenServer) . fst) ths addHeader t v tbl ths = case getHeaderValue t tbl of Nothing -> (t,v) : ths _ -> ths -addNecessaryHeaders :: Context- -> Rspn- -> InternalInfo- -> S.Settings- -> IO TokenHeaderList-addNecessaryHeaders Context{..} rspn ii settings = do+fixHeaders :: Context+ -> Rspn+ -> InternalInfo+ -> S.Settings+ -> IO TokenHeaderList+fixHeaders Context{..} rspn ii settings = do date <- getDate ii let !s = rspnStatus rspn !status = packStatus s@@ -49,7 +49,25 @@ !ths1 = addHeader tokenServer defServer tbl ths0 !ths2 = addHeader tokenDate date tbl ths1 !ths3 = (tokenStatus, status) : ths2- return ths3+ !ths4 = deleteUnnecessaryHeaders ths3 tbl+ return ths4++deleteUnnecessaryHeaders :: TokenHeaderList -> ValueTable -> TokenHeaderList+deleteUnnecessaryHeaders htl0 tbl0 = loop headersToBeRemoved htl0+ where+ loop [] thl = thl+ loop (t:ts) thl = case getHeaderValue t tbl0 of+ Nothing -> thl+ _ -> let !thl' = filter ((/= t) . fst) thl+ in loop ts thl'++headersToBeRemoved :: [Token]+headersToBeRemoved = [ tokenConnection+ , tokenTransferEncoding+ -- Keep-Alive:+ -- Proxy-Connection:+ -- Upgrade:+ ] ----------------------------------------------------------------
Network/Wai/Handler/Warp/HTTP2/Sender.hs view
@@ -132,7 +132,7 @@ !endOfStream = case rspn of RspnNobody _ _ -> True _ -> False- ths <- addNecessaryHeaders ctx rspn ii settings+ ths <- fixHeaders ctx rspn ii settings kvlen <- headerContinue sid ths endOfStream off0 off <- sendHeadersIfNecessary $ off0 + frameHeaderLength + kvlen case rspn of
test/ResponseHeaderSpec.hs view
@@ -55,13 +55,18 @@ hdrs = [] (thl, vt) <- toHeaderTable hdrs addHeader tokenServer v vt thl `shouldBe` thl- it "deletes Server " $ do+ it "deletes Server" $ do let v = "" hdrs = [("Server","MyServer")] hdrs1 = [] (thl, vt) <- toHeaderTable hdrs (thl1, _) <- toHeaderTable hdrs1 addHeader tokenServer v vt thl `shouldBe` thl1+ it "keeps Server" $ do+ let v = ""+ hdrs = [("Server","MyServer"),("Content-Type","Text/HTML")]+ (thl, vt) <- toHeaderTable hdrs+ addHeader tokenContentType v vt thl `shouldBe` thl headers :: H.ResponseHeaders headers = [
warp.cabal view
@@ -1,5 +1,5 @@ Name: warp-Version: 3.2.24+Version: 3.2.25 Synopsis: A fast, light-weight web server for WAI applications. License: MIT License-file: LICENSE