Execution Details Fail to Load - Infinite Spinner & Incorrect /workflows/demo iframe Request (Even After Reset)

Hi,

I’m encountering a persistent issue where I cannot view the details of any workflow execution. I’m hoping someone might have seen this specific behavior before.

Setup:

n8n Version: Updated from 1.89.2 → 1.90.2
Deployment: Docker on AWS Lightsail instance.
Proxy: Caddy v2 handling HTTPS termination for https://n8n.gokem.in
n8n Env Vars (in docker-compose.yml):
N8N_PROTOCOL=https
N8N_TRUST_PROXY=1
WEBHOOK_URL=https://n8n.gokem.in
N8N_PORT=5678
NODE_ENV=production
Caddyfile: Standard reverse_proxy localhost:5678. Includes X-Frame-Options “DENY” header.

Problem:

When clicking on ‘any’ execution row in the “Executions” list, the detail view on the right shows an infinite loading spinner and never loads the execution steps/data.
The browser’s Developer Console consistently shows the error: Refused to display ‘n8n.io - Workflow Automation’ in a frame because it set ‘X-Frame-Options’ to ‘DENY’.
Network tab confirms the browser attempts to load /workflows/demo (Status 200 from server) as an iframe when an execution is clicked, which is then blocked by the browser due to the X-Frame-Options header.
There is ‘no actual workflow’ named “demo”.

Troubleshooting Steps Completed:

  1. Corrected N8N_PROTOCOL from http to https.
  2. Added N8N_TRUST_PROXY=1.
  3. Verified Caddyfile (standard, auto-handles websockets).
  4. Updated n8n from 1.89.2 to 1.90.2.
  5. Cleared browser cache thoroughly, used hard refresh (Cmd+Shift+R), tested in Incognito/Private windows (problem persists).
  6. Performed a full n8n data reset: docker-compose down, deleted the data volume (/home/node/.n8n), docker-compose up -d. Re-setup owner account.
  7. The ‘exact same issue’(spinner + /workflows/demo iframe error) occurs immediately after the reset, even when trying to view the execution of a brand new, simple “Set” node workflow created after the reset.
  8. Checked n8n and Caddy logs during the failure; Caddy logs the 200 response for /workflows/demo, n8n logs show no obvious errors related to this action.

Current Blocker:

We are stuck because the UI persistently attempts this incorrect /workflows/demo iframe load when viewing execution details, preventing access to crucial debugging information. This happens despite correct configuration, the latest version, and even a complete data reset.

Question:

Has anyone encountered a situation where the execution detail view attempts to load an unrelated path (/workflows/demo) in an iframe? Any ideas why this might be happening or other areas to investigate? (We’ve had trouble locating the specific JS Initiator/Call Stack for this request in browser dev tools).

Thank You!

Hey @HFBT
Apologies if you’ve tried this already but just to make sure, what happens when you just change the X-Frame-Options to something other than deny?

header {
    X-Frame-Options "SAMEORIGIN"
}
1 Like

Thank you Jim! The issue was resolved by changing X-Frame-Options “DENY” to X-Frame-Options “SAMEORIGIN” in the Caddy reverse proxy configuration.

Hi Jim,
Hope all is good on your end. Once again thanks for helping resolve my earlier issue which has helped me progress a lot with my workflow. However, recently this new error occurred and have not been able to proceed further.

I need to update an Airtable record’s “Status” and “Booking Options” fields (both are Single Select type). The Record ID for the update is passed into the Airtable node as part of its input JSON item (e.g., from a previous Set or Switch node).

Airtable Node Configuration (“Update Record” operation):

  • Resource: Record
  • Operation: Update
  • Mapping Column Mode: Map Each Column Manually
  • Columns to match on: id
  • ID (using to match) - Expression: {{$json.airtableRecordIdToUpdate}}
    • (This expression correctly resolves to a valid Airtable Record ID string like “recUkSMINWTJgvPzw” when previewed in the expression editor with the correct input item).
  • Values to Update:
    • Status: (Hardcoded string, e.g., “In Progress - A - Needs Pickup location”)
    • Booking Options: (Hardcoded string, e.g., “A - Pickup/Drop”)
    • (Field names used here exactly match Airtable field names, case-sensitive).

The issue is when the node executes with the Record ID supplied by the expression {{$json.airtableRecordIdToUpdate}}, it fails with Error Code 422.

The Airtable API error message is: “You must provide an array of up to 10 record objects, each with an "id" field and a "fields" object for cell values.”

However, if I delete the expression from the “ID (using to match)” field and instead hardcode the exact same Record ID string (e.g., recUkSMINWTJgvPzw) directly into that field, the Airtable update node succeeds perfectly, and the record is updated in Airtable.

Would really appreciate if you could help out.

Thanks,
Allan