Fix: sv_downloadurl Ignored by Clients

December 18, 2025 Daemon666 8 min read 8 visualizações

You set sv_downloadurl, but clients still download at a crawl over the in-game channel, or join with missing textures as if the URL were not there. FastDL being "ignored" almost always comes down to a small number of concrete mistakes: the master download switch is off, the URL path is wrong, the files are not actually on the web host, or the client opted out. This is the checklist that gets HTTP downloads firing.

1. Confirm the prerequisites are on

sv_downloadurl does nothing unless downloads are allowed in the first place:

sv_allowdownload 1
sv_downloadurl "http://dl.example.com/cs"

With sv_allowdownload 0, no download happens at all and the URL is irrelevant. With allow on but the URL empty or unreachable, the server falls back to the slow UDP transfer — which people mistake for "the URL is ignored". So first prove sv_allowdownload is 1 and the URL cvar is actually set by reading it back:

sv_downloadurl

Type it with no argument in the console; it must echo your URL, not an empty string. If it is empty, your server.cfg did not set it, or something reset it later in the exec order.

2. Get the cstrike path right — the number-one cause

The engine appends the game-relative path, including the cstrike/ folder, to your base URL. So for a map file the client requests:

http://dl.example.com/cs/cstrike/maps/de_rats.bsp

Your web root must therefore contain a cstrike/ directory that mirrors the server's layout. The two failure modes are equal and opposite: missing the cstrike/ level (files at /cs/maps/ instead of /cs/cstrike/maps/) or doubling it (you set the URL to .../cs/cstrike and the engine appends another cstrike). Either way every request 404s and the client silently falls back. Open the exact URL above in a browser — if it does not download the file, no client can either.

3. Put the files where the URL points

FastDL only serves files that exist on the web host. Uploading a new map to the game server but forgetting the mirror is the classic "works for me, missing for players" bug. Every custom file the map references — the .bsp, models, sounds, sprites — must be copied to the mirror under the matching path. Keep the mirror in sync with your content and your map rotation. A single missing model on the mirror is a 404 for that file only, which reads as "most content works but this one thing is missing".

4. Handle bzip2 compression correctly

FastDL commonly serves bzip2-compressed copies to cut transfer size. The client requests the .bz2 version first and falls back to the raw file if it is absent. If you compressed the files, the compressed name must be exactly the original plus .bz2:

cstrike/maps/de_rats.bsp.bz2

A common mistake is compressing into a wrong name or leaving only the .bz2 with a broken original, so neither the compressed nor the raw request resolves. Serve both, or at minimum the correctly-named .bz2. The FastDL setup guide covers the Nginx/Apache config and how to generate the .bz2 set.

5. Rule out the client and the MIME type

Two last traps:

  • Client opted out — a player with cl_allowdownload 0 ignores your URL and every other download. You cannot override it; only they can set it back to 1.
  • Web server MIME/permissions — if the host returns the file with the wrong content type, or the files are not world-readable, the client's fetch fails and it falls back. Ensure the web root files are readable and the server serves .bsp/.bz2 as plain downloads, not as some interpreted type.

Troubleshooting

  • Downloads still slow — the URL is empty/unreachable, so it fell back to UDP. Read sv_downloadurl back and open the file URL in a browser.
  • Every file 404s over HTTP — the cstrike/ level is missing or doubled. The request must resolve at <url>/cstrike/maps/....
  • Most content works, one file missing — that single file is not on the mirror. Copy it up.
  • Only one player misses everything — that player set cl_allowdownload 0.
  • Browser downloads the file but the client still fails — wrong MIME type or a missing .bz2 the client expected. Serve a correctly-named .bz2 or the raw file with a plain download type.

Verification

Paste the exact expected URL — http://dl.example.com/cs/cstrike/maps/<yourmap>.bsp — into a browser and confirm it downloads. Then from a clean test client (delete the map locally first), connect and watch net_graph or the loading bar: a fast HTTP pull means FastDL fired; a slow crawl means it fell back and one of the checks above is still wrong. Once one map downloads fast over HTTP, the pipeline is correct and only content-sync discipline keeps it that way. For how these cvars relate to the client-side vetoes, see stuck on verifying resources.

Colaboradores: Daemon666 ✦
Compartilhar: