From 0ef60e752f2928d5e88da0e97da6886c77425979 Mon Sep 17 00:00:00 2001 From: Greg Weber Date: Fri, 23 Dec 2011 07:04:56 -0300 Subject: [PATCH] closes #52 - use 307 redirect for http 1.1 --- yesod-core/Yesod/Handler.hs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/yesod-core/Yesod/Handler.hs b/yesod-core/Yesod/Handler.hs index ad410a97..bd7d30ea 100644 --- a/yesod-core/Yesod/Handler.hs +++ b/yesod-core/Yesod/Handler.hs @@ -377,7 +377,7 @@ runHandler :: HasReps c -> master -> sub -> YesodApp -runHandler handler mrender sroute tomr ma sa = +runHandler handler mrender sroute tomr master sub = YesodApp $ \eh rr cts initSession -> do let toErrorHandler e = case fromException e of @@ -392,8 +392,8 @@ runHandler handler mrender sroute tomr ma sa = } let hd = HandlerData { handlerRequest = rr - , handlerSub = sa - , handlerMaster = ma + , handlerSub = sub + , handlerMaster = master , handlerRoute = sroute , handlerRender = mrender , handlerToMaster = tomr @@ -423,7 +423,7 @@ runHandler handler mrender sroute tomr ma sa = HCRedirect rt loc -> do let hs = Header "Location" (encodeUtf8 loc) : appEndo headers [] return $ YARPlain - (getRedirectStatus rt) hs typePlain emptyContent + (getRedirectStatus rt $ reqWaiRequest rr) hs typePlain emptyContent finalSession HCSendFile ct fp p -> catchIter (sendFile' ct fp p) @@ -707,10 +707,12 @@ getStatus (InvalidArgs _) = H.status400 getStatus (PermissionDenied _) = H.status403 getStatus (BadMethod _) = H.status405 -getRedirectStatus :: RedirectType -> H.Status -getRedirectStatus RedirectPermanent = H.status301 -getRedirectStatus RedirectTemporary = H.status302 -getRedirectStatus RedirectSeeOther = H.status303 +getRedirectStatus :: RedirectType -> W.Request -> H.Status +getRedirectStatus RedirectPermanent _ = H.status301 +getRedirectStatus RedirectTemporary r + | W.httpVersion r == H.http11 = H.status307 + | otherwise = H.status302 +getRedirectStatus RedirectSeeOther _ = H.status303 -- | Different types of redirects. data RedirectType = RedirectPermanent