diff --git a/Sources/NIOHTTPClient/HTTPHandler.swift b/Sources/NIOHTTPClient/HTTPHandler.swift index 8178a0b..65b8605 100644 --- a/Sources/NIOHTTPClient/HTTPHandler.swift +++ b/Sources/NIOHTTPClient/HTTPHandler.swift @@ -286,6 +286,8 @@ internal class TaskHandler: ChannelInboundHandler headers.add(name: "Host", value: request.host) } + headers.add(name: "Connection", value: "close") + do { try headers.validate(body: request.body) } catch { @@ -321,6 +323,11 @@ internal class TaskHandler: ChannelInboundHandler self.state = .sent self.delegate.didTransmitRequestBody(task: self.task) + + let channel = context.channel + self.promise.futureResult.whenComplete { _ in + channel.close(promise: nil) + } } func channelRead(context: ChannelHandlerContext, data: NIOAny) { @@ -346,6 +353,7 @@ internal class TaskHandler: ChannelInboundHandler case .redirected(let head, let redirectURL): self.state = .end self.redirectHandler?.redirect(status: head.status, to: redirectURL, promise: self.promise) + context.close(promise: nil) default: self.state = .end do { diff --git a/Tests/NIOHTTPClientTests/SwiftNIOHTTPTests.swift b/Tests/NIOHTTPClientTests/SwiftNIOHTTPTests.swift index 9f28954..20f3884 100644 --- a/Tests/NIOHTTPClientTests/SwiftNIOHTTPTests.swift +++ b/Tests/NIOHTTPClientTests/SwiftNIOHTTPTests.swift @@ -55,6 +55,7 @@ class SwiftHTTPTests: XCTestCase { head.headers.add(name: "X-Test-Header", value: "X-Test-Value") head.headers.add(name: "Host", value: "localhost") head.headers.add(name: "Content-Length", value: "4") + head.headers.add(name: "Connection", value: "close") XCTAssertEqual(HTTPClientRequestPart.head(head), recorder.writes[0]) var buffer = ByteBufferAllocator().buffer(capacity: 4) buffer.writeString("1234")