It depends on what you mean by “full part of the OS”. From the perspective of a native app developer, you can opt into to HTTP/3 with a simple flag. For example, when I run the code at the end of this response on macOS 13 it prints:
protocols: ["h3", "h3", "h3"]
status: 200
bytes: 13484
showing that all 3 transactions in this request ran over HTTP/3.
Note This test was inspired by the code in TN3102 HTTP/3 in your app.
Or are you asking specifically about Safari?
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
import Foundation
@main
class Main: NSObject, URLSessionTaskDelegate {
func run() async throws {
let config = URLSessionConfiguration.default
config.requestCachePolicy = .reloadIgnoringLocalCacheData
let session = URLSession(configuration: config, delegate: self, delegateQueue: .main)
// We are leaking session here but that’s OK in this test project.
print("will start task")
let url = URL(string: "https://google.com")!
var request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 60.0)
request.assumesHTTP3Capable = true
let (data, response) = try await session.data(for: request)
print("status:", (response as! HTTPURLResponse).statusCode)
print("bytes:", data.count)
}
func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) {
print("protocols:", metrics.transactionMetrics.map { $0.networkProtocolName ?? "-" })
}
static func main() async {
let m = Main()
do {
try await m.run()
} catch {
print(error)
}
}
}