grafana/k6 · error
setting extra HTTP headers: %w
Error message
setting extra HTTP headers: %w
What it means
The CDP command Network.setExtraHTTPHeaders failed, so the extra headers could not be attached to every request the page makes. Like the other Set* wrappers in the NetworkManager, this is a session-level failure: the page's CDP session was unusable when the command ran.
Source
Thrown at internal/js/modules/k6/browser/common/network_manager.go:1041
}
fetchHeaders := make([]*fetch.HeaderEntry, len(headers))
for i, header := range headers {
fetchHeaders[i] = &fetch.HeaderEntry{
Name: header.Name,
Value: header.Value,
}
}
return fetchHeaders
}
// SetExtraHTTPHeaders sets extra HTTP request headers to be sent with every request.
func (m *NetworkManager) SetExtraHTTPHeaders(headers network.Headers) error {
err := network.
SetExtraHTTPHeaders(headers).
Do(cdp.WithExecutor(m.ctx, m.session))
if err != nil {
return fmt.Errorf("setting extra HTTP headers: %w", err)
}
return nil
}
// SetOfflineMode toggles offline mode on/off.
func (m *NetworkManager) SetOfflineMode(offline bool) error {
if m.offline == offline {
return nil
}
m.offline = offline
action := network.EmulateNetworkConditions(
m.offline,
m.networkProfile.Latency,
m.networkProfile.Download,
m.networkProfile.Upload,
)View on GitHub (pinned to 93accf6570)
Solutions
- Move setExtraHTTPHeaders to right after page creation, before goto()
- Prefer browser.newContext({ extraHTTPHeaders }) so headers are set at context creation, which avoids the mid-session CDP call entirely
- If headers change per navigation, set them before each goto, never after close starts
- Check earlier log lines for the real session failure if this recurs
Example fix
// before
await page.goto('https://test.k6.io/');
await page.close();
await page.setExtraHTTPHeaders({ 'X-Test': '1' }); // dead session
// after
const ctx = browser.newContext({ extraHTTPHeaders: { 'X-Test': '1' } });
const page = await ctx.newPage();
await page.goto('https://test.k6.io/'); Defensive patterns
Strategy: validation
Validate before calling
if (page.isClosed()) { throw new Error('page closed; cannot set headers'); }
await page.setExtraHTTPHeaders({ 'X-Test': '1' }); Prevention
- Prefer browser.newContext({ extraHTTPHeaders }) over the per-page call — no mid-session CDP command to fail
- Set headers before the first goto()
- Never call session-touching APIs after close() has started
When it happens
Trigger: Calling page.setExtraHTTPHeaders({...}) after page.close() began, after the browser crashed, or on a target that chromium already destroyed (navigation to a new process).
Common situations: Setting auth/tenant headers late in the script or inside event handlers; setting headers right before context.close(); a prior crash (OOM-killed chromium) leaving the session dead with this being the first call to notice.
Related errors
- %s network cache: %w
- errorText
- attaching new page: %w
- selectHandle.dispose: %w
- attaching worker target ID %v to session ID %v: %w
AI-assisted analysis of grafana/k6@93accf6570 (2026-08-15).
Data as JSON: /api/errors/5eb7fde3dd9cc9c9.
Report an issue: GitHub.