Skip to content

Commit 6d6df4f

Browse files
authored
Add assertion when using gRPC with URLSession (#138)
Add a debug assertion failure that will trigger when the `URLSessionHTTPClient` is used with gRPC to make it more apparent as to why some "successful" responses are still invalid. For context, URLSession does not support trailers and is thus incompatible with gRPC.
1 parent 1c9599b commit 6d6df4f

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

Libraries/Connect/Implementation/URLSessionHTTPClient.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ open class URLSessionHTTPClient: NSObject, HTTPClientInterface {
4545
onMetrics: @Sendable @escaping (HTTPMetrics) -> Void,
4646
onResponse: @Sendable @escaping (HTTPResponse) -> Void
4747
) -> Cancelable {
48+
assert(!request.isGRPC, "URLSessionHTTPClient does not support gRPC, use NIOHTTPClient")
4849
let urlRequest = URLRequest(httpRequest: request)
4950
let task = self.session.dataTask(with: urlRequest) { data, urlResponse, error in
5051
if let httpURLResponse = urlResponse as? HTTPURLResponse {
@@ -93,6 +94,7 @@ open class URLSessionHTTPClient: NSObject, HTTPClientInterface {
9394
open func stream(
9495
request: HTTPRequest, responseCallbacks: ResponseCallbacks
9596
) -> RequestCallbacks {
97+
assert(!request.isGRPC, "URLSessionHTTPClient does not support gRPC, use NIOHTTPClient")
9698
let urlSessionStream = URLSessionStream(
9799
request: URLRequest(httpRequest: request),
98100
session: self.session,
@@ -196,6 +198,15 @@ extension Code {
196198
}
197199
}
198200

201+
private extension HTTPRequest {
202+
var isGRPC: Bool {
203+
return self.headers[HeaderConstants.contentType]?.first.map { contentType in
204+
return contentType.hasPrefix("application/grpc")
205+
&& !contentType.hasPrefix("application/grpc-web")
206+
} ?? false
207+
}
208+
}
209+
199210
private extension URLRequest {
200211
init(httpRequest: HTTPRequest) {
201212
self.init(url: httpRequest.url)

0 commit comments

Comments
 (0)