Fix: FastDL Not Working - Players Still Download at 20 KB/s

June 3, 2026 Daemon666 9 min read 22 Aufrufe

FastDL exists so players pull maps and models over HTTP at real speed instead of the engine's crawling in-game transfer of roughly 20 KB/s. When it "does not work", players are silently falling back to that in-game path — which means the HTTP fetch failed and the engine quietly used the slow route. The fix is to find why the HTTP request 404s or is rejected, because that fallback hides the real error. Work through the layers from cvar to file to web server.

1. Confirm sv_downloadurl is set and correct

On the server console:

sv_downloadurl
sv_allowdownload
sv_allowupload

sv_downloadurl must point at the base of your web-hosted cstrike mirror, and sv_allowdownload must be 1. A typical value:

sv_downloadurl "https://dl.example.com/cstrike/"
sv_allowdownload 1

The engine appends the resource path to this URL. So a map maps/de_rats.bsp is fetched from https://dl.example.com/cstrike/maps/de_rats.bsp. If your base URL points at the wrong level, every fetch 404s and every player falls back to the slow download.

2. Mirror the exact directory layout

FastDL is a dumb file mirror — the paths must match the server's cstrike tree exactly. If the server needs sound/misc/foo.wav, the web server must serve it at .../cstrike/sound/misc/foo.wav. Case matters on Linux web servers. Lay it out identically:

cstrike/maps/de_rats.bsp
cstrike/sound/misc/foo.wav
cstrike/models/player/leet/leet.mdl
cstrike/sprites/foo.spr
cstrike/gfx/env/skybox.tga

Only files the client must download need mirroring — maps, and custom models/sounds/sprites referenced by precache. Standard game content the player already has does not.

3. bzip2 the files (the big one)

The engine will fetch a .bz2 version of a resource if it exists, which is far smaller and faster. Most FastDL setups compress everything and serve the .bz2 alongside the raw file. Compress in place, keeping both:

find cstrike -type f \( -name '*.bsp' -o -name '*.mdl' -o -name '*.wav' \
  -o -name '*.spr' -o -name '*.tga' \) -exec bzip2 -k {} \;

Now the mirror has both de_rats.bsp and de_rats.bsp.bz2. If your host only serves the uncompressed files, downloads still work but are slower and heavier — the missing .bz2 is a common "it works but it's not fast" cause.

4. Fix MIME types and 404 handling

A web server that returns an HTML 404 page with a 200 status, or that refuses to serve .bsp/.bz2 because it has no MIME type for them, breaks FastDL. Make the server return real 404s and serve these as generic binary. On Apache, in the mirror's .htaccess or vhost:

AddType application/octet-stream .bsp .bz2 .mdl .spr .wav .tga
Options -Indexes

Test the URL yourself — this is the single most decisive check:

curl -I "https://dl.example.com/cstrike/maps/de_rats.bsp.bz2"

You must get HTTP/1.1 200 and a sensible Content-Type. A 404, a redirect to HTTPS/login, or an HTML body is exactly why players fall back to the slow download.

5. Permissions and HTTPS

The web server user must be able to read the files (chmod 644, directories 755). And if sv_downloadurl uses https://, the certificate must be valid — some old clients and the 25th-Anniversary client handle a broken chain poorly. If in doubt, a plain http:// mirror removes TLS from the equation while you debug.

Common errors

  • Still ~20 KB/s for everyone — the HTTP fetch 404s. curl -I the exact resource URL; fix the base URL or the file path.
  • Works but slow — you are serving uncompressed files; add the .bz2 variants.
  • Some files download, others don't — case-sensitivity or a missing MIME type on a specific extension. Linux paths are case-sensitive.
  • Downloads then "missing file" on the client — the mirrored file is truncated or the wrong version. Re-upload and re-compress it.
  • Nothing downloads at allsv_allowdownload is 0. Check it first.

Verification

Connect a client to a map that requires a custom file and watch the download bar — FastDL is working when a map pulls in a second or two instead of grinding for a minute. Then confirm the server side by fetching a known resource directly:

curl -I "https://dl.example.com/cstrike/maps/de_rats.bsp.bz2"

A 200 here plus a fast in-game download means FastDL is live. If the query works but the client still crawls, double-check sv_downloadurl has no typo and the file the client needs actually exists at the mirrored path — the engine's silent fallback will otherwise keep hiding the 404 from you.

Mitwirkende: Daemon666 ✦
Teilen: