1.3 Overview

The Background Intelligent Transfer Service (BITS) Upload Protocol, hereafter called the BITS Upload Protocol, defines a way to transfer large payloads from a client to an HTTP server or vice versa, even in the face of interruptions, by sending the payload in multiple fragments. Both HTTP and HTTPS are supported. For more information see [MSDN-BITS].

The protocol allows a client to pause, resume, or cancel a transfer.

A client can also limit the rate of bandwidth used by manipulating the length and pace of the transmitted fragments; details are beyond the scope of this specification.

The protocol defines a method for the server to send a notification to a server application about the availability of a payload upon completion of the upload and to send the response data from the server application to the client.

A download from the server to the client follows standard HTTP GET syntax, using byte ranges to control the length of downloaded fragments. The message flow is summarized below:

  1. The client optionally determines the length of the content using a HEAD request.

  2. The client downloads the content by sending one or more GET requests. If the request does not encompass the entire URL, the GET request identifies the requested fragment using the Range: header.

An upload from client to server uses the message flow below.

Various messages exchanged among the roles as part of the protocol

Figure 1: Various messages exchanged among the roles as part of the protocol

In the preceding diagram, the dotted lines indicate messages that are sent only in some variations of the protocol. The following sections describe the message flow for each type of upload, and the examples in section 4 contain detailed examples of each of the messages.

Uploads can be accomplished in two modes: upload and upload-reply. The details about the messages exchanged in each mode are mentioned later.