on master help sign in
Make sure HEAD response bodies are empty (fixes #468)
commit0d7072c93dc4428f750eefd9e4d50a6ecef6808b authorMichael Snoyman <michael@snoyman.com> dateSat 21 Nov 2015, 22:05 (11 years ago) parentcb1e8d9
1 file changed+11−3
warp/Network/Wai/Handler/Warp/Response.hs+11−3
warp/Network/Wai/Handler/Warp/Response.hs+11−3
@@ -154,7 +154,11 @@ sendResponse :: ByteString -- ^ default server value
154154sendResponse defServer conn ii req reqidxhdr src response = do
155155 hs <- addServerAndDate hs0
156156 if hasBody s then do
157− -- HEAD comes here even if it does not have body.
157+ -- HEAD comes here even if it does not have body. We include HEAD
158+ -- responses here so that we generate appropriate content-length
159+ -- headers below.
160+ --
161+ -- See definition of rsp below for proper body stripping.
158162 sendRsp conn mfdc ver s hs rsp
159163 T.tickle th
160164 return ret
@@ -178,8 +182,12 @@ sendResponse defServer conn ii req reqidxhdr src response = do
178182 isHead = requestMethod req == H.methodHead
179183 rsp = case response of
180184 ResponseFile _ _ path mPart -> RspFile path mPart mRange isHead (T.tickle th)
181− ResponseBuilder _ _ b -> RspBuilder b needsChunked
182− ResponseStream _ _ fb -> RspStream fb needsChunked th
185+ ResponseBuilder _ _ b
186+ | isHead -> RspBuilder mempty False
187+ | otherwise -> RspBuilder b needsChunked
188+ ResponseStream _ _ fb
189+ | isHead -> RspBuilder mempty False
190+ | otherwise -> RspStream fb needsChunked th
183191 ResponseRaw raw _ -> RspRaw raw src (T.tickle th)
184192 ret = case response of
185193 ResponseFile {} -> isPersist