on master help sign in
Do not compress for MSIE 6
commitb5b2167efa4230c3de4749639ae5cc24362a117e authorMichael Snoyman <michael@snoyman.com> dateTue 12 Jul 2011, 23:39 (15 years ago) parentf6099f5
2 files changed+16−1
Network/Wai/Middleware/Gzip.hs+4−1 runtests.hs+12
Network/Wai/Middleware/Gzip.hs+4−1
@@ -21,6 +21,7 @@ import Network.Wai.Zlib
2121import Data.Maybe (fromMaybe)
2222import Data.Enumerator (($$), joinI)
2323import qualified Data.ByteString.Char8 as S8
24+import qualified Data.ByteString as S
2425
2526-- | Use gzip to compress the body of the response.
2627--
@@ -39,12 +40,14 @@ gzip files app env = do
3940 return $
4041 case res of
4142 ResponseFile{} | not files -> res
42− _ -> if "gzip" `elem` enc
43+ _ -> if "gzip" `elem` enc && not isMSIE6
4344 then ResponseEnumerator $ compressE $ responseEnumerator res
4445 else res
4546 where
4647 enc = fromMaybe [] $ (splitCommas . S8.unpack)
4748 `fmap` lookup "Accept-Encoding" (requestHeaders env)
49+ ua = fromMaybe "" $ lookup "user-agent" $ requestHeaders env
50+ isMSIE6 = "MSIE 6" `S.isInfixOf` ua
4851
4952compressE :: (forall a. ResponseEnumerator a)
5053 -> (forall a. ResponseEnumerator a)
runtests.hs+12
@@ -42,6 +42,7 @@ testSuite = testGroup "Network.Wai.Parse"
4242 , testCase "takeLine" caseTakeLine
4343 , testCase "jsonp" caseJsonp
4444 , testCase "gzip" caseGzip
45+ , testCase "gzip not for MSIE" caseGzipMSIE
4546 , testCase "vhost" caseVhost
4647 , testCase "autohead" caseAutohead
4748 , testCase "method override" caseMethodOverride
@@ -259,6 +260,17 @@ caseGzip = flip runSession gzipApp $ do
259260 assertNoHeader "Content-Encoding" sres2
260261 assertBody "test" sres2
261262
263+caseGzipMSIE :: Assertion
264+caseGzipMSIE = flip runSession gzipApp $ do
265+ sres1 <- request Request
266+ { requestHeaders =
267+ [ ("Accept-Encoding", "gzip")
268+ , ("User-Agent", "Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 6.0)")
269+ ]
270+ }
271+ assertNoHeader "Content-Encoding" sres1
272+ liftIO $ simpleBody sres1 @?= "test"
273+
262274vhostApp1 = const $ return $ responseLBS status200 [] "app1"
263275vhostApp2 = const $ return $ responseLBS status200 [] "app2"
264276vhostApp = vhost