Какой опыт есть с особенностями браузеров
Что проверяют
Для Node.js-разработчика этот вопрос шире вёрстки: интервьюер смотрит, понимаете ли вы, что браузер это отдельная среда со своими правилами безопасности, которых нет в Node.js. Типичное продолжение: «запрос из Postman проходит, а из браузера нет, почему?»
Как отвечать
Разделите ответ на две части, в каждой свои случаи.
Первая часть: браузер как клиент вашего API.
- CORS: ограничение действует только в браузере, поэтому curl и Postman его не видят. Непростые запросы (с
Content-Type: application/jsonили своими заголовками) идут с предварительнымOPTIONS, и сервер обязан на него ответить.Access-Control-Allow-Origin: *нельзя сочетать с передачей кук; - куки: Chrome считает куку без атрибута
SameSiteкакLax, аSameSite=Noneработает только вместе сSecure. Safari режет сторонние куки ещё жёстче, что ломает авторизацию во встроенных фреймах; - кэш: браузер кэширует по заголовкам
Cache-ControlиETag, которые отдаёт ваш сервер.
Вторая часть: код, который выполняется и там и там. При серверном рендеринге (Next.js, Nuxt) обращение к window или localStorage падает на сервере, а разный результат рендера на сервере и клиенте даёт ошибку гидратации. Целевые браузеры задаются в browserslist, Babel, SWC или esbuild транспилируют код под них, поддержку свойства сверяют по MDN и caniuse. Из реальных различий полезно помнить 100vh на мобильном Safari (панель адреса перекрывает низ, помогают единицы dvh и svh) и разбор дат: надёжен только формат ISO 8601.
Кросс-браузерные проверки удобно автоматизировать через Playwright, он гоняет тесты на Chromium, Firefox и WebKit. Опирайтесь на свои истории и честно обозначьте глубину: если с вёрсткой вы сталкивались мало, акцент на API и SSR будет убедительнее.
Где спотыкаются
Рассказывают про attachEvent и Internet Explorer. Браузер снят с поддержки в 2022 году, и такой пример выдаёт знания десятилетней давности.
Пытаются лечить CORS на клиенте, не понимая, что разрешение выдаёт сервер своими заголовками.
Советуют Modernizr для определения возможностей. Сегодня это делают @supports в CSS и проверка наличия API в JavaScript, отдельная библиотека не нужна.