Featured image of post What Is a Progressive Download?

What Is a Progressive Download?

# Definition

A progressive download is similar in a lot of ways to a traditional download but with a couple major differences:

  1. A progressively downloaded audio file can be listened to while the file is being downloaded
  2. A progressive download does not have to be the whole file, a device can request smaller pieces of the overall file

When it comes to podcast analytics a progressive download is extremely important to how analytics are derived. Because a progressive download is theoretically a smaller piece of the entire file, there are additional pieces of information that can be gleaned from these types of requests.

This is how the IAB Tech Lab explains a progressive download:

3.2 These podcasts appear to be streamed, but the file is actually being downloaded while the listener is listening to the file. The downloaded file is stored in a temporary location rather than to a library as with a downloaded podcast. Since progressively downloaded files are typically downloaded the same way as the files stored for later listening, delivery for these two formats are recorded the same way in the server logs. The only difference between the two is whether the listener is actively playing the file as it is downloaded or being saved for later listening - which can only be discerned by the player.

Source: Podcast Measurement Technical Guidelines v.2.2

# Request Headers 1

The request format of a progressive download is similar to the format of a download, but with one minor change. When requesting a progressive download a range is passed. This range is represented in a range of bytes. The server will return the portion of the file that matches the range of bytes. For example, if I wanted to download the second half of a 30 mb (30,000,000 bytes) audio file, the range would be bytes=15000000-30000000.

1
2
3
4
5
6
7
8
GET /url/of/audio.mp3 HTTP/1.1
Host: audiohost.com
Accept-Encoding: identity
Accept-Language: en-US,en;q=0.9
Accept: */*
Connection: keep-alive
👉 Range: bytes=15000000-30000000
User-Agent: Podcasts/4023.540.3 CFNetwork/1494.0.7 Darwin/23.4.0

# Server Logs 2

The data tracked for a progressive download can be seen within the sc-bytes, sc-content-len, sc-range-end, sc-range-start and sc-status properties below. The sc-range-start/end should match what was sent in the request header above and the sc-bytes/sc-content-len indicate the amount of content returned to the requesting device.

Property Value
c-ip 192.0.2.100
c-port 11040
cs(Cookie) -
cs(Host) d111111abcdef8.cloudfront.net
cs(Referer) -
cs(User-Agent) Podcasts/4023.540.3 CFNetwork/1494.0.7 Darwin/23.4.0
cs-bytes 23
cs-method GET
cs-protocol https
cs-protocol-version HTTP/2.0
cs-uri-query -
cs-uri-stem /audiohost.com
date 2019-12-04
fle-encrypted-fields -
fle-status -
👉 sc-bytes 15000000
👉 sc-content-len 15000000
sc-content-type audio/mpeg
👉 sc-range-end 30000000
👉 sc-range-start 15000000
👉 sc-status 206
ssl-cipher ECDHE-RSA-AES128-GCM-SHA256
ssl-protocol TLSv1.2
time 21:02:31
time-taken 0.001
time-to-first-byte 0.001
x-edge-detailed-result-type Hit
x-edge-location LAX1
x-edge-request-id SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ==
x-edge-response-result-type Hit
x-edge-result-type Hit
x-forwarded-for -
x-host-header audiohost.com
Built with Hugo
Theme Stack designed by Jimmy