glanceapp/glance · error · errNoContent
%w: could not read body: %w
Error message
%w: could not read body: %w
What it means
The extension response body could not be read with io.ReadAll after the request succeeded. This means the connection broke mid-transfer (unexpected EOF, reset) or the server sent a malformed chunked encoding. Wrapped with errNoContent so the widget shows an empty result.
Source
Thrown at internal/glance/widget-extension.go:140
request.URL.RawQuery = options.Parameters.toQueryString()
}
for key, value := range options.Headers {
request.Header.Add(key, value)
}
response, err := http.DefaultClient.Do(request)
if err != nil {
slog.Error("Failed fetching extension", "url", options.URL, "error", err)
return extension{}, fmt.Errorf("%w: request failed: %w", errNoContent, err)
}
defer response.Body.Close()
body, err := io.ReadAll(response.Body)
if err != nil {
slog.Error("Failed reading response body of extension", "url", options.URL, "error", err)
return extension{}, fmt.Errorf("%w: could not read body: %w", errNoContent, err)
}
extension := extension{}
if response.Header.Get(extensionHeaderTitle) == "" {
extension.Title = "Extension"
} else {
extension.Title = response.Header.Get(extensionHeaderTitle)
}
if response.Header.Get(extensionHeaderTitleURL) != "" {
extension.TitleURL = response.Header.Get(extensionHeaderTitleURL)
}
contentType, ok := extensionStringToType[response.Header.Get(extensionHeaderContentType)]
if !ok {
contentType, ok = extensionStringToType[options.FallbackContentType]View on GitHub (pinned to 91324e8de7)
Solutions
- Check the extension server logs for crashes or body-size limits (nginx client_max_body_size is not it here — look at proxy buffer/timeout settings)
- Retry the fetch — transient truncation often resolves itself
- Reduce extension response size (fewer items) to rule out intermediary limits
Defensive patterns
Strategy: retry
Try / catch
body, err := io.ReadAll(response.Body)
if err != nil {
if errors.Is(err, io.ErrUnexpectedEOF) {
// truncated transfer: retry once before giving up
response, body, err = refetchWithRetry(options.URL, 1)
}
if err != nil { return extension{}, fmt.Errorf("%w: could not read body: %w", errNoContent, err) }
} Prevention
- Keep extension payloads small; avoid proxies that buffer/truncate large bodies
- Set sane Content-Length on extension responses so truncation is detectable
When it happens
Trigger: Server closes the connection before Content-Length bytes are sent; proxy truncates the response; network reset during a large extension payload.
Common situations: Extension endpoint behind a proxy with a smaller body limit than the response; server crash mid-response; mobile/flaky networks to self-hosted extensions.
Related errors
- reading authentication response: %v
- %w: request failed: %w
- URL is required
- could not solve reddit challenge
- failed to retrieve any content
AI-assisted analysis of glanceapp/glance@91324e8de7 (2026-08-15).
Data as JSON: /api/errors/3c8879980cc6456a.
Report an issue: GitHub.