octobercms/october · error · ApplicationException
system::lang.server.response_empty
system::lang.server.response_empty
Error message
Empty response from the server.
What it means
In requestServerData(), any non-200, non-404 status whose body is empty throws 'Empty response from the server' (system::lang.server.response_empty). So the gateway returned an error status (5xx, 429, gateway timeouts) with a blank body — the updater refuses to guess and surfaces it. Distinct from a 404 (response_not_found) and from a 200 with bad JSON (response_invalid).
Source
Thrown at modules/system/classes/updatemanager/HasGatewayAccess.php:49
protected $secret;
/**
* requestServerData contacts the update server for a response.
* @param string $uri
* @param array $postData
* @return array
*/
public function requestServerData($uri, $postData = [])
{
$result = $this->makeHttpRequest($this->createServerUrl($uri), $postData);
$contents = $result->body();
if ($result->status() === 404) {
throw new ApplicationException(Lang::get('system::lang.server.response_not_found'));
}
if ($result->status() !== 200) {
throw new ApplicationException(
strlen($contents)
? $contents
: Lang::get('system::lang.server.response_empty')
);
}
$resultData = false;
try {
$resultData = @json_decode($contents, true);
}
catch (Exception $ex) {
throw new ApplicationException(Lang::get('system::lang.server.response_invalid'));
}
if ($resultData === false || (is_string($resultData) && !strlen($resultData))) {
throw new ApplicationException(Lang::get('system::lang.server.response_invalid'));
}View on GitHub (pinned to b608633a7e)
Solutions
- Retry after a short wait — transient 5xx/429 responses usually clear on their own
- Reproduce with curl -i against the gateway to see the raw status/body
- If a proxy sits in front, configure it to pass through response bodies instead of blanking them
- Check the marketplace status page / community channels for outages if it persists
Defensive patterns
Strategy: retry
Try / catch
$attempts = 0;
while (true) {
try {
return \System\Classes\UpdateManager::instance()->requestServerData($uri, $postData);
} catch (\October\Rain\Exception\ApplicationException $ex) {
$transient = str_contains($ex->getMessage(), 'Empty response');
if (!$transient || ++$attempts >= 3) {
throw $ex;
}
usleep((2 ** $attempts) * 1000000); // 0.2s, 0.4s, 0.8s backoff
}
} Prevention
- Wrap marketplace calls in retry with exponential backoff for 5xx/empty-body errors
- Schedule update checks off-peak to dodge gateway load spikes
- Log the status/endpoint alongside failures to separate 404s from empty-body errors
When it happens
Trigger: Update server overloaded or returning 502/503 with empty body; a proxy stripping error bodies; rate limiting (429) from the marketplace; middleware resetting connections into blank responses. Any backend update/marketplace operation that calls requestServerData().
Common situations: Temporary marketplace outages; corporate proxies; hosting providers rate-limiting outbound APIs; maintenance windows on the update infrastructure.
Related errors
- system::lang.server.response_not_found
- system::lang.server.response_invalid
- system::lang.server.response_empty
- system::lang.server.response_invalid
- Plugin configuration file plugin.yaml is not found for the p
AI-assisted analysis of octobercms/october@b608633a7e (2026-08-21).
Data as JSON: /api/errors/c1feb8e9e3188351.
Report an issue: GitHub.