Skip to content

Por que meu portal não carrega?

O portal da Layers é exibido dentro de um iframe no web e de uma WebView no app mobile. Diferentemente de um navegador comum, esses contextos têm restrições de segurança adicionais — e qualquer uma delas pode impedir que a sua página seja carregada.

As três causas mais comuns são descritas abaixo. Abra o DevTools do navegador (aba Console) com o portal aberto e localize a mensagem de erro:

Mensagem no consoleCausa
Refused to display '...' in a frame because it set 'X-Frame-Options' to '...'X-Frame-Options
Refused to frame '...' because an ancestor violates the Content Security PolicyContent Security Policy (CSP)
Mixed Content: ... was loaded over HTTPS, but requested an insecure resourceMixed Content

X-Frame-Options

O cabeçalho HTTP X-Frame-Options instrui o navegador a bloquear a página caso ela seja carregada dentro de um frame.

Configurações que bloqueiam o portal

ValorComportamento
DENYBloqueia em qualquer frame
SAMEORIGINPermite apenas se o frame estiver no mesmo domínio

Se o seu servidor retorna qualquer um desses valores, o portal não irá carregar.

Como corrigir

Remova o cabeçalho X-Frame-Options ou substitua-o pelo CSP frame-ancestors (ver seção abaixo), que oferece controle mais granular.

Se precisar manter o cabeçalho, use ALLOWALL (não recomendado para produção em geral, mas válido se a página não contém dados sensíveis):

X-Frame-Options: ALLOWALL

Content Security Policy (CSP)

A diretiva frame-ancestors dentro do cabeçalho Content-Security-Policy controla quais origens podem embutir a sua página em um frame. É o substituto moderno do X-Frame-Options e tem precedência sobre ele nos navegadores atuais.

Configurações que bloqueiam o portal

Content-Security-Policy: frame-ancestors 'none'
Content-Security-Policy: frame-ancestors 'self'

Como corrigir

Adicione as origens da Layers à diretiva frame-ancestors:

Content-Security-Policy: frame-ancestors https://*.layers.education

Se precisar manter 'self' também:

Content-Security-Policy: frame-ancestors 'self' https://*.layers.education

TIP

frame-ancestors aceita wildcards de subdomínio (*.layers.education), o que cobre todas as instâncias whitelabel da Layers com uma única entrada.


Mixed Content

Mixed content ocorre quando uma página carregada via HTTPS tenta carregar recursos via HTTP. Navegadores e WebViews modernos bloqueiam esse tipo de requisição por padrão.

No contexto de portais, o problema mais comum é a URL do próprio portal cadastrada com http:// nas configurações do app, enquanto a Layers é servida via https://.

Sintomas

  • Portal em branco ou com erro de rede no console
  • Aviso Mixed Content: The page was loaded over HTTPS, but requested an insecure resource

Como corrigir

  1. Sirva sua aplicação via HTTPS. Certifique-se de que o servidor do portal tem um certificado TLS válido.
  2. Atualize a URL do portal no AppMaker para usar https:// em vez de http://.
  3. Verifique que todos os sub-recursos carregados pela página (scripts, imagens, fontes, APIs) também usam HTTPS.