Irbisa · Шпаргалка
Веб-платформа и безопасность
Как браузер рисует страницу, DOM и события, CSS-раскладка, доступность, HTTP и кэширование, XSS, CSP и CORS, cookies, токены и OAuth, хранилища
Как работает распространение событий в DOM и что такое делегирование событий?
const list = document.querySelector<HTMLUListElement>('#todos')!; // One listener for every current and future rowlist.addEventListener('click', (event) => { const button = (event.target as Element).closest<HTMLButtonElement>('button[data-id]'); if (!button || !list.contains(button)) return;…Чем отличаются
<script>,<script async>и<script defer>?<head> <!-- blocks parsing: avoid in head --> <script src="/legacy.js"></script> <!-- run after parsing, in this order --> <script defer src="/vendor.js"></script>…Как браузер решает, какое CSS-правило победит, если элементу подходят несколько правил?
@layer reset, vendor, app; @layer vendor { #sidebar .button { color: gray; } /* (1,1,0), but in an earlier layer */}…Когда использовать Flexbox, а когда CSS Grid?
/* One dimension: a toolbar */.toolbar { display: flex; align-items: center; gap: 8px;}…Чем отличаются хранилища
localStorage,sessionStorage, cookies и база данных IndexedDB?Чем отличаются
GET,POST,PUT,PATCHиDELETEи какие из них безопасные и идемпотентные?С какими HTTP-кодами ответа фронтенд-разработчик сталкивается чаще всего и чем отличаются 401 и 403, а также 301, 302 и 304?
Что изменилось при переходе с HTTP/1.1 на HTTP/2 и HTTP/3 и как это влияет на бандлинг и шардирование доменов?
По этим заголовкам ответов: какие ответы браузер переиспользует без запроса, какие перепроверяет, а какие никогда не сохраняет?
GET /assets/index-3f9c1a.jsCache-Control: public, max-age=31536000, immutable GET /index.htmlCache-Control: no-cacheETag: "v42" GET /api/meCache-Control: no-store GET /api/products?page=1Cache-Control: max-age=60, stale-while-revalidate=300Что происходит, когда вы вводите URL в браузере и нажимаете Enter?
Как браузер превращает HTML и CSS в пиксели (critical rendering path)?
Чем reflow отличается от repaint и что такое layout thrashing?
const items = document.querySelectorAll<HTMLElement>('.item'); // wrong: each write invalidates layout, the next read forces it againitems.forEach((el) => { el.style.height = `${el.offsetWidth / 2}px`;});…В каком порядке этот код выведет сообщения, когда пользователь нажмёт на кнопку?
const outer = document.querySelector('#outer')!;const button = document.querySelector('#outer button')!; outer.addEventListener('click', () => console.log('outer bubble'));outer.addEventListener('click', () => console.log('outer capture'), { capture: true });button.addEventListener('click', () => console.log('button'));document.addEventListener('click', () => console.log('document'));Почему
z-index: 9999иногда не поднимает элемент наверх?.card { transform: translateY(0); /* creates a stacking context */} .card .tooltip { position: absolute;…Что нужно, чтобы React-приложение было доступным (accessibility)?
Найдите баг: пользователи клавиатуры и скринридеров не могут открыть меню.
function MenuTrigger({ onOpen }: { onOpen: () => void }) { return ( <div className="menu-trigger" onClick={onOpen}> <img src="/icons/menu.svg" /> </div> );}Что такое ARIA и когда её не стоит использовать?
Что такое XSS, как React от него защищает и где эта защита заканчивается?
import DOMPurify from 'dompurify'; function Comment({ html, website }: { html: string; website: string }) { const safeHtml = DOMPurify.sanitize(html); // Allow-list the protocol: escaping does not make a URL safe const safeUrl = /^https?:/i.test(website) ? website : undefined;…Что такое CORS, что такое preflight-запрос и как исправить ошибку CORS?
// Frontend: send cookies to another originconst res = await fetch('https://api.example.com/orders', { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, // not a simple request: preflight first body: JSON.stringify({ productId: 42 }),…Что такое Content Security Policy и как внедрить её в существующее React-приложение, ничего не сломав?
import { randomBytes } from 'node:crypto'; // Called for every HTML response: the nonce must be new each timeexport function cspFor() { const nonce = randomBytes(16).toString('base64'); const policy = […Что такое CSRF и как от него защищают cookies с
SameSiteи CSRF-токены?Где одностраничному приложению хранить токен авторизации: в
localStorage, в cookie или в памяти?Как работает вход через внешнего провайдера в одностраничном приложении (OAuth 2.0 authorization code flow с PKCE)?
const AUTH = 'https://auth.example.com';const client = { client_id: 'web', redirect_uri: `${location.origin}/callback` };const b64url = (bytes: Uint8Array) => btoa(String.fromCharCode(...bytes)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); export async function signIn() {…