Skip to content

Commit d61b31a

Browse files
committed
Changed to only output port when it is not 80 or 443
Also added test
1 parent 618153f commit d61b31a

File tree

3 files changed

+35
-6
lines changed

3 files changed

+35
-6
lines changed

Diff for: Sources/AsyncHTTPClient/HTTPHandler.swift

+3-6
Original file line numberDiff line numberDiff line change
@@ -253,11 +253,6 @@ extension HTTPClient {
253253
return self.scheme == "https" || self.scheme == "https+unix"
254254
}
255255

256-
/// Specified port.
257-
var specifiedPort: Int? {
258-
return self.url.port
259-
}
260-
261256
/// Resolved port.
262257
public var port: Int {
263258
return self.url.port ?? (self.useTLS ? 443 : 80)
@@ -777,7 +772,9 @@ extension TaskHandler: ChannelDuplexHandler {
777772
var headers = request.headers
778773

779774
if !request.headers.contains(name: "Host") {
780-
headers.add(name: "Host", value: "\(request.host)\(request.specifiedPort.map { ":\($0)" } ?? "")")
775+
let port = request.port
776+
let host = (port != 80 && port != 443) ? "\(request.host):\(port)" : request.host
777+
headers.add(name: "Host", value: host)
781778
}
782779

783780
do {

Diff for: Tests/AsyncHTTPClientTests/HTTPClientInternalTests+XCTest.swift

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ extension HTTPClientInternalTests {
2727
return [
2828
("testHTTPPartsHandler", testHTTPPartsHandler),
2929
("testBadHTTPRequest", testBadHTTPRequest),
30+
("testHostPort", testHostPort),
3031
("testHTTPPartsHandlerMultiBody", testHTTPPartsHandlerMultiBody),
3132
("testProxyStreaming", testProxyStreaming),
3233
("testProxyStreamingFailure", testProxyStreamingFailure),

Diff for: Tests/AsyncHTTPClientTests/HTTPClientInternalTests.swift

+31
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,37 @@ class HTTPClientInternalTests: XCTestCase {
9090
}
9191
}
9292

93+
func testHostPort() throws {
94+
let channel = EmbeddedChannel()
95+
let recorder = RecordingHandler<HTTPClientResponsePart, HTTPClientRequestPart>()
96+
let task = Task<Void>(eventLoop: channel.eventLoop, logger: HTTPClient.loggingDisabled)
97+
98+
try channel.pipeline.addHandler(recorder).wait()
99+
try channel.pipeline.addHandler(TaskHandler(task: task,
100+
kind: .host,
101+
delegate: TestHTTPDelegate(),
102+
redirectHandler: nil,
103+
ignoreUncleanSSLShutdown: false,
104+
logger: HTTPClient.loggingDisabled)).wait()
105+
106+
let request1 = try Request(url: "http://localhost:80/get")
107+
XCTAssertNoThrow(try channel.writeOutbound(request1))
108+
let request2 = try Request(url: "https://localhost/get")
109+
XCTAssertNoThrow(try channel.writeOutbound(request2))
110+
let request3 = try Request(url: "http://localhost:8080/get")
111+
XCTAssertNoThrow(try channel.writeOutbound(request3))
112+
113+
var head1 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get")
114+
head1.headers.add(name: "Host", value: "localhost")
115+
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")
118+
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+
XCTAssertEqual(HTTPClientRequestPart.head(head3), recorder.writes[4])
122+
}
123+
93124
func testHTTPPartsHandlerMultiBody() throws {
94125
let channel = EmbeddedChannel()
95126
let delegate = TestHTTPDelegate()

0 commit comments

Comments
 (0)