Question d'entretien pour Développeur full stack

Pourquoi le navigateur envoie-t-il une requête OPTIONS avant certains de nos appels d'API, et comment évitez-vous qu'elle échoue ?

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Cet appel OPTIONS, c'est le preflight CORS. Les navigateurs l'envoient dès qu'une requête cross origin n'est pas simple, ce qui couvre tout en-tête personnalisé, un content type JSON, ou une méthode autre que GET, HEAD ou POST. Votre serveur doit répondre à ce OPTIONS avec Access-Control-Allow-Origin, Allow-Methods et Allow-Headers qui couvrent réellement la vraie requête, plus Allow-Credentials et une origine concrète si des cookies sont en jeu.

Pourquoi les recruteurs posent cette question

Tout le monde s'est fait bloquer par CORS ; beaucoup moins savent l'expliquer. Le recruteur veut savoir si vous comprenez que CORS est une politique appliquée par le navigateur qui protège l'utilisateur, et non un contrôle d'accès côté serveur, parce que les candidats qui ratent ça ont tendance à proposer de le désactiver ou de le contourner par un proxy d'une façon qui crée de vrais trous de sécurité. Savoir nommer les règles de la requête simple montre que vous avez débogué ça correctement plutôt que collé un joker.

Comment structurer votre réponse

  • Dites ce qui déclenche un preflight par rapport à une requête simple.
  • Listez les en-têtes de réponse que le serveur doit renvoyer.
  • Couvrez le cas avec identifiants et pourquoi les jokers échouent là.
  • Précisez que CORS protège l'utilisateur du navigateur, pas votre serveur.

Exemple de réponse

Exemple parlé, à la première personne

Le preflight, c'est le navigateur qui demande la permission avant d'envoyer quoi que ce soit avec des effets de bord. Un GET simple sans en-tête personnalisé est une requête simple et part directement, mais dès que vous ajoutez un en-tête Authorization ou que vous envoyez du application/json, vous avez le OPTIONS d'abord. Quand ça échoue, je vérifie trois choses dans l'ordre : est-ce que le serveur répond au OPTIONS tout court, est-ce que Access-Control-Allow-Headers liste chaque en-tête que la vraie requête envoie, et est-ce que l'origine est renvoyée à l'identique, schéma et port compris. Le cas avec identifiants piège du monde, parce que si vous envoyez des cookies vous ne pouvez pas utiliser une origine joker ; vous devez renvoyer une origine autorisée précise et mettre Access-Control-Allow-Credentials à true. Je pose aussi Access-Control-Max-Age pour que le navigateur arrête de faire un preflight à chaque appel. Ce que je tiens à faire comprendre à une équipe, c'est que rien de tout ça ne protège l'API. Tout ce qui n'est pas un navigateur ignore complètement CORS, donc l'autorisation doit toujours être appliquée sur le serveur.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Pourquoi ne peut-on pas utiliser une origine joker avec des identifiants ?
  • Que fait vraiment Access-Control-Max-Age ?
  • Comment géreriez-vous une intégration tierce légitime qui appelle cette API ?

Autres questions pour Développeur full stack

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot