Skip to content

Commit 63aa8d1

Browse files
committed
The host header should also include the port
1 parent 5e3b77b commit 63aa8d1

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

Sources/AsyncHTTPClient/HTTPHandler.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,11 @@ extension HTTPClient {
253253
return self.scheme == "https" || self.scheme == "https+unix"
254254
}
255255

256+
/// Specified port.
257+
public var specifiedPort: Int? {
258+
return self.url.port
259+
}
260+
256261
/// Resolved port.
257262
public var port: Int {
258263
return self.url.port ?? (self.useTLS ? 443 : 80)
@@ -772,7 +777,7 @@ extension TaskHandler: ChannelDuplexHandler {
772777
var headers = request.headers
773778

774779
if !request.headers.contains(name: "Host") {
775-
headers.add(name: "Host", value: request.host)
780+
headers.add(name: "Host", value: "\(request.host)\(request.specifiedPort.map { ":\($0)" } ?? "")")
776781
}
777782

778783
do {

Tests/AsyncHTTPClientTests/HTTPClientInternalTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,15 @@ class HTTPClientInternalTests: XCTestCase {
4949
ignoreUncleanSSLShutdown: false,
5050
logger: HTTPClient.loggingDisabled)).wait()
5151

52-
var request = try Request(url: "http://localhost/get")
52+
var request = try Request(url: "http://localhost:8080/get")
5353
request.headers.add(name: "X-Test-Header", value: "X-Test-Value")
5454
request.body = .string("1234")
5555

5656
XCTAssertNoThrow(try channel.writeOutbound(request))
5757
XCTAssertEqual(3, recorder.writes.count)
5858
var head = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get")
5959
head.headers.add(name: "X-Test-Header", value: "X-Test-Value")
60-
head.headers.add(name: "Host", value: "localhost")
60+
head.headers.add(name: "Host", value: "localhost:8080")
6161
head.headers.add(name: "Content-Length", value: "4")
6262
XCTAssertEqual(HTTPClientRequestPart.head(head), recorder.writes[0])
6363
let buffer = ByteBuffer.of(string: "1234")

Tests/AsyncHTTPClientTests/HTTPClientTests.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ class HTTPClientTests: XCTestCase {
216216
return
217217
}
218218
let hostName = try? JSONDecoder().decode(RequestInfo.self, from: body).data
219-
XCTAssertEqual("127.0.0.1", hostName)
219+
XCTAssertEqual("127.0.0.1:\(self.defaultHTTPBin.port)", hostName)
220220
}
221221

222222
func testPercentEncoded() throws {
@@ -763,7 +763,7 @@ class HTTPClientTests: XCTestCase {
763763
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
764764
method: .GET,
765765
uri: "/foo",
766-
headers: HTTPHeaders([("Host", "localhost")]))),
766+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
767767
try web.readInbound()))
768768
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
769769
try web.readInbound()))
@@ -787,7 +787,7 @@ class HTTPClientTests: XCTestCase {
787787
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
788788
method: .GET,
789789
uri: "/foo",
790-
headers: HTTPHeaders([("Host", "localhost")]))),
790+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
791791
try web.readInbound()))
792792
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
793793
try web.readInbound()))
@@ -808,7 +808,7 @@ class HTTPClientTests: XCTestCase {
808808
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
809809
method: .GET,
810810
uri: "/foo",
811-
headers: HTTPHeaders([("Host", "localhost")]))),
811+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
812812
try web.readInbound()))
813813
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
814814
try web.readInbound()))
@@ -831,7 +831,7 @@ class HTTPClientTests: XCTestCase {
831831
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
832832
method: .GET,
833833
uri: "/foo",
834-
headers: HTTPHeaders([("Host", "localhost")]))),
834+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
835835
try web.readInbound()))
836836
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
837837
try web.readInbound()))
@@ -859,7 +859,7 @@ class HTTPClientTests: XCTestCase {
859859
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
860860
method: .GET,
861861
uri: "/foo",
862-
headers: HTTPHeaders([("Host", "localhost")]))),
862+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
863863
try web.readInbound()))
864864
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
865865
try web.readInbound()))
@@ -1036,7 +1036,7 @@ class HTTPClientTests: XCTestCase {
10361036
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
10371037
method: .GET,
10381038
uri: "/foo",
1039-
headers: HTTPHeaders([("Host", "localhost")]))),
1039+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
10401040
try web.readInbound()))
10411041
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
10421042
try web.readInbound()))

0 commit comments

Comments
 (0)