DeflateRequestCompressor
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
public struct DeflateRequestCompressor : Sendable, RequestInterceptor
RequestAdapter
which compresses outgoing URLRequest
bodies using the deflate
Content-Encoding
and adds the
appropriate header.
Note
Most requests to most APIs are small and so would only be slowed down by applying this adapter. Measure the size of your request bodies and the performance impact of using this adapter before use. Using this adapter with already compressed data, such as images, will, at best, have no effect. Additionally, body compression is a synchronous operation, so measuring the performance impact may be important to determine whether you want to use a dedicatedrequestQueue
in your Session
instance. Finally, not all servers support request
compression, so test with all of your server configurations before deploying.
-
Type that determines the action taken when the
See moreURLRequest
already has aContent-Encoding
header.Declaration
Swift
public enum DuplicateHeaderBehavior : Sendable
-
Error
produced when the outgoingURLRequest
already has aContent-Encoding
header, when the instance has been configured to produce an error.Declaration
Swift
public struct DuplicateHeaderError : Error
-
Behavior to use when the outgoing
URLRequest
already has aContent-Encoding
header.Declaration
Swift
public let duplicateHeaderBehavior: DuplicateHeaderBehavior
-
Closure which determines whether the outgoing body data should be compressed.
Declaration
Swift
public let shouldCompressBodyData: @Sendable (_ bodyData: Data) -> Bool
-
Creates an instance with the provided parameters.
Declaration
Swift
public init(duplicateHeaderBehavior: DuplicateHeaderBehavior = .error, shouldCompressBodyData: @escaping @Sendable (_ bodyData: Data) -> Bool = { _ in true })
Parameters
duplicateHeaderBehavior
DuplicateHeaderBehavior
to use..error
by default.shouldCompressBodyData
Closure which determines whether the outgoing body data should be compressed.
true
by default. -
Declaration
Swift
public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, any Error>) -> Void)