diff --git a/src/Suave.Tests/HttpWriters.fs b/src/Suave.Tests/HttpWriters.fs index ff92c2fa..20724a9e 100644 --- a/src/Suave.Tests/HttpWriters.fs +++ b/src/Suave.Tests/HttpWriters.fs @@ -189,4 +189,15 @@ let headers cfg = ], hdrs |> getRespHeaders "Vary")) ctx + + testCase "setHeader adds Server header with hideHeader = true" <| fun _ -> + let ctx = runWith { cfg with hideHeader = true } (Writers.setHeader "Server" "My custom value" >=> OK "test") + + withContext (fun _ -> + let hdrs = requestHeaders () + Assert.Equal( + "expecting Server header value", + [ "Server", "My custom value" ], + hdrs |> getRespHeaders "Server")) + ctx ] diff --git a/src/Suave/HttpOutput.fs b/src/Suave/HttpOutput.fs index 0de4fa0a..eadca6e7 100644 --- a/src/Suave/HttpOutput.fs +++ b/src/Suave/HttpOutput.fs @@ -58,16 +58,19 @@ module HttpOutput = do! asyncWriteLn (String.Concat [| x; ": "; y |]) } - let inline writePreamble exclusions (context: HttpContext) = withConnection { + let inline writePreamble (context: HttpContext) = withConnection { let r = context.response do! asyncWriteBufferedArrayBytes [| ByteConstants.httpVersionBytes; ASCII.bytes (r.status.code.ToString()); ByteConstants.spaceBytes; ASCII.bytes (r.status.reason); ByteConstants.dateBytes; ASCII.bytes (Globals.utcNow().ToString("R")); ByteConstants.EOL |] - if not context.runtime.hideHeader then + + if context.runtime.hideHeader then + do! writeHeaders ["date";"content-length"] r.headers + else do! asyncWriteBufferedBytes ByteConstants.serverHeaderBytes + do! writeHeaders ["server";"date";"content-length"] r.headers - do! writeHeaders exclusions r.headers do! writeContentType r.headers } @@ -134,7 +137,7 @@ module HttpOutput = let writeResponse (newCtx:HttpContext) = socket{ if newCtx.response.writePreamble then - let! (_, connection) = writePreamble ["server";"date";"content-length"] newCtx newCtx.connection + let! (_, connection) = writePreamble newCtx newCtx.connection let! connection = writeContent true { newCtx with connection = connection } newCtx.response.content return { newCtx with connection = connection } else