Skip to content

Commit c27176c

Browse files
committed
Don't output port when it is default for current scheme
1 parent d4a3722 commit c27176c

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

Sources/AsyncHTTPClient/HTTPHandler.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -771,10 +771,13 @@ extension TaskHandler: ChannelDuplexHandler {
771771
uri: request.uri)
772772
var headers = request.headers
773773

774-
if !request.headers.contains(name: "Host") {
774+
if !request.headers.contains(name: "host") {
775775
let port = request.port
776-
let host = (port != 80 && port != 443) ? "\(request.host):\(port)" : request.host
777-
headers.add(name: "Host", value: host)
776+
var host = request.host
777+
if (port != 80 || request.scheme != "http") && (port != 443 || request.scheme != "https") {
778+
host += ":\(port)"
779+
}
780+
headers.add(name: "host", value: host)
778781
}
779782

780783
do {

Tests/AsyncHTTPClientTests/HTTPClientInternalTests.swift

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,16 +109,21 @@ class HTTPClientInternalTests: XCTestCase {
109109
XCTAssertNoThrow(try channel.writeOutbound(request2))
110110
let request3 = try Request(url: "http://localhost:8080/get")
111111
XCTAssertNoThrow(try channel.writeOutbound(request3))
112+
let request4 = try Request(url: "http://localhost:443/get")
113+
XCTAssertNoThrow(try channel.writeOutbound(request4))
114+
let request5 = try Request(url: "https://localhost:80/get")
115+
XCTAssertNoThrow(try channel.writeOutbound(request5))
112116

113-
var head1 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get")
114-
head1.headers.add(name: "Host", value: "localhost")
117+
let head1 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get", headers: ["host": "localhost"])
115118
XCTAssertEqual(HTTPClientRequestPart.head(head1), recorder.writes[0])
116-
var head2 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get")
117-
head2.headers.add(name: "Host", value: "localhost")
119+
let head2 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get", headers: ["host": "localhost"])
118120
XCTAssertEqual(HTTPClientRequestPart.head(head2), recorder.writes[2])
119-
var head3 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get")
120-
head3.headers.add(name: "Host", value: "localhost:8080")
121+
let head3 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get", headers: ["host": "localhost:8080"])
121122
XCTAssertEqual(HTTPClientRequestPart.head(head3), recorder.writes[4])
123+
let head4 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get", headers: ["host": "localhost:443"])
124+
XCTAssertEqual(HTTPClientRequestPart.head(head4), recorder.writes[6])
125+
let head5 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get", headers: ["host": "localhost:80"])
126+
XCTAssertEqual(HTTPClientRequestPart.head(head5), recorder.writes[8])
122127
}
123128

124129
func testHTTPPartsHandlerMultiBody() throws {

0 commit comments

Comments
 (0)