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