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

  1. Retry after a short wait — transient 5xx/429 responses usually clear on their own
  2. Reproduce with curl -i against the gateway to see the raw status/body
  3. If a proxy sits in front, configure it to pass through response bodies instead of blanking them
  4. 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

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


AI-assisted analysis of octobercms/october@b608633a7e (2026-08-21). Data as JSON: /api/errors/c1feb8e9e3188351. Report an issue: GitHub.