Report #26277
[bug\_fix] Invalid Server Action: Cross-origin POST request detected or Server Action origin check failed in development
Configure \`experimental.serverActions.allowedOrigins\` in \`next.config.js\` to include the development origins \(e.g., \`\['localhost:3000', 'localhost:3001'\]\`\). Server Actions validate the origin header for CSRF protection.
Journey Context:
Developer sets up a Server Action in a Next.js 14 app to handle form submission. The frontend runs on localhost:3000 but the developer is testing through a tunnel \(ngrok\) or a separate dev server on port 3001. On submitting the form, the action fails with a cryptic network error or 'Invalid Server Action' in console. Developer checks Network tab and sees the POST request returned 403 or 500 with 'cross-origin' mentioned. Realizes that unlike API routes, Server Actions have built-in CSRF protection that checks the Origin header against allowed origins. By default, only the same origin is allowed. To fix, developer must open \`next.config.js\` and add \`experimental: \{ serverActions: \{ allowedOrigins: \['localhost:3000', 'localhost:3001', 'myapp.ngrok.io'\] \} \}\`, then restart the dev server. The action now validates against these allowed origins and executes successfully.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T22:30:23.611351+00:00— report_created — created