milvus-io/milvus · error

HTTP ${response.status}

Error message

HTTP ${response.status}

What it means

Thrown while fetching a client's configuration: GET /_telemetry/clients/{clientId}/config is an async command-dispatch endpoint; any non-2xx response (this code path does not special-case 401) raises this error with the raw HTTP status. Common statuses are 401 (expired sessionStorage token handled nowhere here), 404 (unknown client), and 500 (server-side dispatch failure).

Source

Thrown at internal/http/webui/telemetry.html:2127

        let currentConfigClientId = '';

        async function showClientConfig(clientId) {
            currentConfigClientId = clientId;
            document.getElementById('configModalClientId').textContent = clientId;
            document.getElementById('configModalContent').innerHTML = `
                <div class="empty-state" style="padding: 20px;">
                    <p>Fetching configuration from client...</p>
                </div>
            `;
            document.getElementById('configModal').style.display = 'flex';

            try {
                const response = await fetch(`${API_BASE}/_telemetry/clients/${encodeURIComponent(clientId)}/config`, {
                    headers: { 'Authorization': authToken }
                });

                if (!response.ok) {
                    throw new Error(`HTTP ${response.status}`);
                }

                const data = await response.json();

                if (data.status === 'pending') {
                    // Start polling for the command reply
                    document.getElementById('configModalContent').innerHTML = `
                        <div class="empty-state" style="padding: 20px;">
                            <p>Command sent. Waiting for client response...</p>
                            <p style="font-size: 12px; color: var(--gray-400); margin-top: 8px;">Command ID: ${escapeHtml(data.command_id)}</p>
                        </div>
                    `;
                    pollForConfigReply(data.command_id, clientId);
                } else {
                    renderConfigResponse(data);
                }
            } catch (error) {
                document.getElementById('configModalContent').innerHTML = `

View on GitHub (pinned to b43a76673a)

Solutions

  1. Check the status number shown in the message: 401 -> log in again; 404 -> refresh the client list and pick a live client; 5xx -> inspect proxy logs.
  2. Refresh clients and retry the config fetch against a client with a current heartbeat.
  3. If 401 recurs quickly, verify the milvusAuth sessionStorage token is being sent correctly (devtools Network tab).

Example fix

// before
if (!response.ok) {
    throw new Error(`HTTP ${response.status}`);
}

// after
if (response.status === 401) {
    logout();
    return;
}
if (!response.ok) {
    const err = await response.json().catch(() => ({}));
    throw new Error(err.error || `HTTP ${response.status}`);
}
Defensive patterns

Strategy: try-catch

Try / catch

try {
  const response = await fetch(url, { headers: { 'Authorization': authToken } });
  if (response.status === 401) { logout(); return; }
  if (response.status === 404) { throw new Error('Client not found - it may have disconnected. Refresh the list.'); }
  if (!response.ok) throw new Error(`Config request failed: HTTP ${response.status}`);
} catch (e) { renderModalError(e.message); }

Prevention

When it happens

Trigger: Clicking 'Config' on a client after the session token expired (401); client disconnected and evicted (404); server error while enqueueing the get_config command.

Common situations: Leaving the WebUI open past token/session lifetime; stale client table; proxy restarting so in-memory clients are empty.

Related errors


AI-assisted analysis of milvus-io/milvus@b43a76673a (2026-08-15). Data as JSON: /api/errors/37ec285602764bd5. Report an issue: GitHub.