Use 303 for HTTP/1.1 (#217)

This commit is contained in:
Michael Snoyman 2012-01-17 08:31:39 +02:00
parent 895bb7666b
commit 7aa5c02c35
2 changed files with 15 additions and 2 deletions

View File

@ -455,7 +455,13 @@ safeEh er = YesodApp $ \_ _ _ session -> do
-- a 302. If at some future date it is determined that virtually all clients
-- understand 303, this implementation will switch to that status code.
redirect :: RedirectUrl master url => url -> GHandler sub master a
redirect = redirectWith H.status302
redirect url = do
req <- waiRequest
let status =
if W.httpVersion req == H.http11
then H.status303
else H.status302
redirectWith status url
-- | Redirect to the given URL with the specified status code.
redirectWith :: RedirectUrl master url => H.Status -> url -> GHandler sub master a

View File

@ -43,10 +43,17 @@ specs = describe "Redirect" [
assertStatus 307 res
assertBodyContains "" res
, it "302 redirect for regular" $ app $ do
, it "303 redirect for regular, HTTP 1.1" $ app $ do
res <- request defaultRequest {
pathInfo = ["rregular"]
}
assertStatus 303 res
assertBodyContains "" res
, it "302 redirect for regular, HTTP 1.0" $ app $ do
res <- request defaultRequest {
pathInfo = ["rregular"]
, httpVersion = H.http10
}
assertStatus 302 res
assertBodyContains "" res
]