About BITS

Use Background Intelligent Transfer Service (BITS) to download files from or upload files to HTTP web servers or SMB file servers.

BITS continues to transfer files after an application exits as long as the user who initiated the transfer remains logged on and a network connection is maintained. BITS will not force a network connection. BITS resumes transfers after a network connection that had been lost is reestablished or after a user who had logged off logs back in. For more information, see Users and Network Connections.

BITS is mindful of the current network cost and congestion so that a background job interferes as little as possible with the user's foreground experience. BITS uses idle network bandwidth to transfer the files and will increase or decrease the rate at which files are transferred based on the amount of idle network bandwidth available. If a network application begins to consume more bandwidth, BITS decreases its transfer rate to preserve the user's interactive experience. BITS uses app-specified transfer policies to prevent files from transferring on costed network connections.

The BITS application can use the different BITS priority levels to let BITS intelligently pick which transfer jobs to run. Higher priority jobs preempt lower priority jobs. Jobs at the same priority level share transfer time, which prevents a large job from blocking small jobs in the transfer queue. Lower priority jobs do not receive transfer time until all higher priority jobs are complete or in an error state.

BITS uses Windows BranchCache for peer caching. For more information, see the BranchCache Overview.

Universal Windows Platform (UWP) developers should use the Windows.Networking.BackgroundTransfer API and not the BITS API.

There are three types of transfer jobs. A download job downloads files to the client, an upload job uploads a file to the server, and an upload-reply job uploads a file to the server and receives a reply file from the server application.

The following topics provide more detailed information about BITS:

Use the BITS interfaces to write applications that create and monitor transfer jobs. For details on using the BITS interfaces, see Using BITS.