Pergunta de entrevista para Desenvolvedor Full Stack

Por que o navegador manda uma requisição OPTIONS antes de algumas das nossas chamadas de API, e como você impede que ela falhe?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Essa chamada OPTIONS é o preflight do CORS. Os navegadores mandam isso sempre que uma requisição cross origin não é simples, o que cobre qualquer header customizado, um content type JSON, ou um método diferente de GET, HEAD ou POST. O seu servidor precisa responder aquele OPTIONS com Access-Control-Allow-Origin, Allow-Methods e Allow-Headers que de fato cubram a requisição real, mais Allow-Credentials e uma origem concreta se houver cookies envolvidos.

Por que os entrevistadores perguntam isso

Todo mundo já foi bloqueado por CORS; bem menos gente consegue explicar. O entrevistador quer saber se você entende que o CORS é uma política imposta pelo navegador para proteger o usuário, e não um controle de acesso no servidor, porque candidatos que não pegam isso tendem a sugerir desligar ou contornar com proxy de formas que criam buracos de segurança reais. Nomear as regras de requisição simples mostra que você depurou aquilo direito em vez de colar um curinga.

Como estruturar sua resposta

  • Diga o que dispara um preflight versus uma requisição simples.
  • Liste os headers de resposta que o servidor precisa devolver.
  • Cubra o caso com credenciais e por que curingas falham ali.
  • Deixe claro que o CORS protege o usuário do navegador, não o seu servidor.

Exemplo de resposta

Exemplo falado, em primeira pessoa

O preflight é o navegador pedindo permissão antes de mandar qualquer coisa com efeito colateral. Um GET simples sem headers customizados é uma requisição simples e sai direto, mas no momento em que você adiciona um header Authorization ou manda application/json, você ganha o OPTIONS antes. Quando ele falha, eu checo três coisas em ordem: o servidor responde OPTIONS mesmo, o Access-Control-Allow-Headers lista todos os headers que a requisição real manda, e a origem está sendo ecoada exatamente, incluindo esquema e porta. O caso de credenciais pega as pessoas, porque se você manda cookies você não pode usar uma origem curinga; você tem que refletir uma origem específica permitida e colocar Access-Control-Allow-Credentials como true. Eu também configuro o Access-Control-Max-Age para o navegador parar de fazer preflight em toda chamada. O que eu garanto que um time entenda é que nada disso protege a API. Qualquer coisa que não seja um navegador ignora o CORS por completo, então a autorização continua tendo que ser imposta no servidor.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Por que não dá para usar uma origem curinga com credenciais?
  • O que o Access-Control-Max-Age de fato faz?
  • Como você lidaria com uma integração legítima de terceiro chamando esta API?

Mais perguntas para Desenvolvedor Full Stack

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot