Skip to content

Commit 40ca463

Browse files
authored
Request.url should return nil for situations where it is not applicable (#84)
Regular CONNECT requests and OPTIONS * requests do not have URLs
1 parent 74191f0 commit 40ca463

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

Sources/HTTPTypesFoundation/HTTPRequest+URL.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ extension HTTPRequest {
2424
/// fields.
2525
public var url: URL? {
2626
get {
27+
if (self.method == .connect && self.extendedConnectProtocol == nil)
28+
|| (self.method == .options && self.path == "*")
29+
{
30+
return nil
31+
}
2732
if let schemeField = self.pseudoHeaderFields.scheme,
2833
let authorityField = self.pseudoHeaderFields.authority,
2934
let pathField = self.pseudoHeaderFields.path

Tests/HTTPTypesFoundationTests/HTTPTypesFoundationTests.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,31 @@ final class HTTPTypesFoundationTests: XCTestCase {
8383
XCTAssertEqual(request4.url?.absoluteString, "https://127.0.0.1:443/")
8484
}
8585

86+
func testNilRequestURL() {
87+
let request1 = HTTPRequest(
88+
method: .connect,
89+
scheme: "https",
90+
authority: "www.example.com:443",
91+
path: "www.example.com:443"
92+
)
93+
XCTAssertNil(request1.url)
94+
95+
var request2 = HTTPRequest(
96+
method: .connect,
97+
scheme: "https",
98+
authority: "www.example.com",
99+
path: "/"
100+
)
101+
request2.extendedConnectProtocol = "websocket"
102+
XCTAssertEqual(request2.url?.absoluteString, "https://www.example.com/")
103+
104+
let request3 = HTTPRequest(method: .options, scheme: "https", authority: "www.example.com", path: "*")
105+
XCTAssertNil(request3.url)
106+
107+
let request4 = HTTPRequest(method: .options, scheme: "https", authority: "www.example.com", path: "/")
108+
XCTAssertEqual(request4.url?.absoluteString, "https://www.example.com/")
109+
}
110+
86111
func testRequestToFoundation() throws {
87112
let request = HTTPRequest(
88113
method: .get,

0 commit comments

Comments
 (0)