Skip to content

Range-requests unsupported in unit

Nginx Unit does not support the Range header and thus does not support range requests. Unit does not intend on ever supporting range requests, hence this webserver is not suited for castopod. The end user problem arising from this is that apple podcasts does not work which does a small range request to check if it accepts the podcast or not (as is already handled in the castopod codebase).

Example GET request to https://podcasts.darmstadt.social/media/podcasts/thinkpadmuseum/1707681819_6bd3cc0b7c33e67952b4.mp3

$ curl -i -L https://podcasts.darmstadt.social/media/podcasts/thinkpadmuseum/1707681819_6bd3cc0b7c33e67952b4.mp3 -H "Range: 0-1023"
HTTP/2 200 
access-control-allow-origin: *
content-type: audio/mpeg
date: Mon, 26 Feb 2024 21:33:20 GMT
etag: "65d20d2c-2be6f8d"
last-modified: Sun, 18 Feb 2024 13:59:08 GMT
referrer-policy: same-origin
server: Unit/1.31.1
strict-transport-security: max-age=63072000
x-content-type-options: nosniff
x-frame-options: sameorigin
content-length: 46034829

The request should return a 206 instead of a 200 and not serve the whole file.

HEAD request:

$ curl -I -L https://podcasts.darmstadt.social/media/podcasts/thinkpadmuseum/1707681819_6bd3cc0b7c33e67952b4.mp3
HTTP/2 200 
access-control-allow-origin: *
content-type: audio/mpeg
date: Mon, 26 Feb 2024 21:42:02 GMT
etag: "65d20d2c-2be6f8d"
last-modified: Sun, 18 Feb 2024 13:59:08 GMT
referrer-policy: same-origin
server: Unit/1.31.1
strict-transport-security: max-age=63072000
x-content-type-options: nosniff
x-frame-options: sameorigin
content-length: 46034829

This works perfectly fine for non-docker setups. The requests do not change when done against the localhost:8000 (without further proxying before unit).

See upstream issue https://github.com/nginx/unit/issues/1011

Edited by A W