fix: Storybook trava num spinner infinito por causa do X-Frame-Options global #74
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/storybook-frame-options"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Sintoma: Storybook abre (sidebar carrega normal), mas a pré-visualização de cada componente fica presa num spinner infinito.
Causa raiz: o Storybook carrega a própria pré-visualização (
iframe.html) dentro de um<iframe>na mesma origem -- é assim que o "manager" dele sempre funcionou, não uma integração nova.frontend/nginx.confdefineX-Frame-Options: DENYno blocoserver(linha 9, pra proteger o app contra clickjacking) elocation /storybook/não tinhaadd_headerpróprio, então herdava esse header -- bloqueando o Storybook de se auto-framar.Confirmado ao vivo em
dev-eegqa.jonataslima.xyz:GET /storybook/iframe.htmlretornava200, mas o navegador recusava renderizar (net::ERR_BLOCKED_BY_RESPONSE+Refused to display '.../iframe.html' in a frame because it set 'X-Frame-Options' to 'deny'no console).Fix:
location /storybook/ganhou seus própriosadd_header, comSAMEORIGINem vez deDENY-- permite esse self-frame e continua bloqueando framing por terceiros. Repete os outros 3 headers de segurança porqueadd_headerdo nginx não herda do bloco pai quando a location redeclara qualquer um deles (comportamento documentado do nginx, não uma escolha nova).Verificação: não deu pra rebuildar a imagem localmente (sem Docker rodando neste ambiente) -- a causa raiz foi confirmada inspecionando os headers de resposta reais do deploy de dev via
fetch()autenticado no navegador (x-frame-options: denypresente em/storybook/e/storybook/iframe.html, ausente nas demais rotas do app). Depois do deploy, confirmar abrindo qualquer story -- a pré-visualização deve renderizar em vez de ficar no spinner.🤖 Generated with Claude Code