---
title: URLSessionConfiguration
framework: foundation
role: symbol
role_heading: Class
path: foundation/urlsessionconfiguration
---

# URLSessionConfiguration

A configuration object that defines behavior and policies for a URL session.

## Declaration

```swift
class URLSessionConfiguration
```

## Mentioned in

Accessing cached data Downloading files in the background Fetching website data into memory Improving network reliability using Multipath TCP Uploading streams of data

## Overview

Overview An URLSessionConfiguration object defines the behavior and policies to use when uploading and downloading data using an URLSession object. When uploading or downloading data, creating a configuration object is always the first step you must take. You use this object to configure the timeout values, caching policies, connection requirements, and other types of information that you intend to use with your URLSession object. It is important to configure your URLSessionConfiguration object appropriately before using it to initialize a session object. Session objects make a copy of the configuration settings you provide and use those settings to configure the session. Once configured, the session object ignores any changes you make to the URLSessionConfiguration object. If you need to modify your transfer policies, you must update the session configuration object and use it to create a new URLSession object. note: In some cases, the policies defined in this configuration may be overridden by policies specified by an NSURLRequest object provided for a task. Any policy specified on the request object is respected unless the session’s policy is more restrictive. For example, if the session configuration specifies that cellular networking should not be allowed, the NSURLRequest object cannot request cellular networking. For more information about using configuration objects to create sessions, see URLSession. Types of session configurations The behavior and capabilities of a URL session are largely determined by the kind of configuration used to create the session. The singleton shared session (which has no configuration object) is for basic requests. It’s not as customizable as sessions that you create, but it serves as a good starting point if you have very limited requirements. You access this session by calling the shared class method. See that method’s discussion for more information about its limitations. Default sessions behave much like the shared session (unless you customize them further), but let you obtain data incrementally using a delegate. You can create a default session configuration by calling the default method on the URLSessionConfiguration class. Ephemeral sessions are similar to default sessions, but they don’t write caches, cookies, or credentials to disk. You can create an ephemeral session configuration by calling the ephemeral method on the URLSessionConfiguration class. Background sessions let you perform uploads and downloads of content in the background while your app isn’t running. You can create a background session configuration by calling the backgroundSessionConfiguration(_:) method on the URLSessionConfiguration class.

## Topics

### Creating a session configuration object

- [default](foundation/urlsessionconfiguration/default.md)
- [ephemeral](foundation/urlsessionconfiguration/ephemeral.md)
- [background(withIdentifier:)](foundation/urlsessionconfiguration/background(withidentifier:).md)
- [init()](foundation/urlsessionconfiguration/init().md)
- [new()](foundation/urlsessionconfiguration/new().md)

### Setting general properties

- [identifier](foundation/urlsessionconfiguration/identifier.md)
- [httpAdditionalHeaders](foundation/urlsessionconfiguration/httpadditionalheaders.md)
- [networkServiceType](foundation/urlsessionconfiguration/networkservicetype.md)
- [allowsCellularAccess](foundation/urlsessionconfiguration/allowscellularaccess.md)
- [timeoutIntervalForRequest](foundation/urlsessionconfiguration/timeoutintervalforrequest.md)
- [timeoutIntervalForResource](foundation/urlsessionconfiguration/timeoutintervalforresource.md)
- [sharedContainerIdentifier](foundation/urlsessionconfiguration/sharedcontaineridentifier.md)
- [waitsForConnectivity](foundation/urlsessionconfiguration/waitsforconnectivity.md)
- [usesClassicLoadingMode](foundation/urlsessionconfiguration/usesclassicloadingmode.md)

### Setting cookie policies

- [httpCookieAcceptPolicy](foundation/urlsessionconfiguration/httpcookieacceptpolicy.md)
- [httpShouldSetCookies](foundation/urlsessionconfiguration/httpshouldsetcookies.md)
- [httpCookieStorage](foundation/urlsessionconfiguration/httpcookiestorage.md)
- [HTTPCookie](foundation/httpcookie.md)

### Setting security policies

- [tlsMinimumSupportedProtocolVersion](foundation/urlsessionconfiguration/tlsminimumsupportedprotocolversion.md)
- [tlsMaximumSupportedProtocolVersion](foundation/urlsessionconfiguration/tlsmaximumsupportedprotocolversion.md)
- [urlCredentialStorage](foundation/urlsessionconfiguration/urlcredentialstorage.md)
- [tlsMinimumSupportedProtocol](foundation/urlsessionconfiguration/tlsminimumsupportedprotocol.md)
- [tlsMaximumSupportedProtocol](foundation/urlsessionconfiguration/tlsmaximumsupportedprotocol.md)
- [requiresDNSSECValidation](foundation/urlsessionconfiguration/requiresdnssecvalidation.md)

### Setting caching policies

- [urlCache](foundation/urlsessionconfiguration/urlcache.md)
- [requestCachePolicy](foundation/urlsessionconfiguration/requestcachepolicy.md)

### Supporting background transfers

- [sessionSendsLaunchEvents](foundation/urlsessionconfiguration/sessionsendslaunchevents.md)
- [isDiscretionary](foundation/urlsessionconfiguration/isdiscretionary.md)
- [shouldUseExtendedBackgroundIdleMode](foundation/urlsessionconfiguration/shoulduseextendedbackgroundidlemode.md)

### Supporting custom protocols

- [protocolClasses](foundation/urlsessionconfiguration/protocolclasses.md)
- [URLProtocol](foundation/urlprotocol.md)

### Supporting Multipath TCP

- [Improving network reliability using Multipath TCP](foundation/improving-network-reliability-using-multipath-tcp.md)
- [multipathServiceType](foundation/urlsessionconfiguration/multipathservicetype-swift.property.md)
- [URLSessionConfiguration.MultipathServiceType](foundation/urlsessionconfiguration/multipathservicetype-swift.enum.md)
- [Multipath Entitlement](bundleresources/entitlements/com.apple.developer.networking.multipath.md)

### Setting HTTP policy and proxy properties

- [httpMaximumConnectionsPerHost](foundation/urlsessionconfiguration/httpmaximumconnectionsperhost.md)
- [httpShouldUsePipelining](foundation/urlsessionconfiguration/httpshouldusepipelining.md)
- [proxyConfigurations](foundation/urlsessionconfiguration/proxyconfigurations.md)
- [connectionProxyDictionary](foundation/urlsessionconfiguration/connectionproxydictionary.md)

### Supporting connectivity changes

- [waitsForConnectivity](foundation/urlsessionconfiguration/waitsforconnectivity.md)

### Supporting limited modes

- [allowsConstrainedNetworkAccess](foundation/urlsessionconfiguration/allowsconstrainednetworkaccess.md)
- [allowsExpensiveNetworkAccess](foundation/urlsessionconfiguration/allowsexpensivenetworkaccess.md)

### Deprecated methods

- [backgroundSessionConfiguration(_:)](foundation/urlsessionconfiguration/backgroundsessionconfiguration(_:).md)

### Instance Properties

- [allowsUltraConstrainedNetworkAccess](foundation/urlsessionconfiguration/allowsultraconstrainednetworkaccess.md)
- [enablesEarlyData](foundation/urlsessionconfiguration/enablesearlydata.md)

## Relationships

### Inherits From

- [NSObject](objectivec/nsobject-swift.class.md)

### Conforms To

- [CVarArg](swift/cvararg.md)
- [CustomDebugStringConvertible](swift/customdebugstringconvertible.md)
- [CustomStringConvertible](swift/customstringconvertible.md)
- [Equatable](swift/equatable.md)
- [Hashable](swift/hashable.md)
- [NSCopying](foundation/nscopying.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)
- [Sendable](swift/sendable.md)
- [SendableMetatype](swift/sendablemetatype.md)

## See Also

### Creating a session

- [init(configuration:)](foundation/urlsession/init(configuration:).md)
- [init(configuration:delegate:delegateQueue:)](foundation/urlsession/init(configuration:delegate:delegatequeue:).md)
- [configuration](foundation/urlsession/configuration.md)
