[{"data":1,"prerenderedAt":1417},["ShallowReactive",2],{"$fxmQjcWOJcPydq_TCNLkKXQ3lgSzkhhH7IAE5lIOQ1jw":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":153,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":156,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":161,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":506,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":728,"mdc--rs71w5-key":748,"mdc--ioccr3-key":760,"mdc-1ovpzg-key":778,"mdc-b10obt-key":795,"mdc-8scoa1-key":812,"mdc--18cy5b-key":829,"mdc-6or6rn-key":837,"mdc-ce58x8-key":858,"mdc--b4la2t-key":878,"mdc--jzidiq-key":892,"mdc-3xvqrm-key":928,"mdc--joqm9w-key":968,"mdc-rf9p1p-key":977,"mdc-pmduvp-key":996,"mdc-9jj47g-key":1031,"mdc--fkuae5-key":1089,"mdc-yhy65t-key":1108,"mdc-rb9nhs-key":1133,"mdc--g4xlih-key":1161,"mdc--lpnbzx-key":1344,"mdc-d6haqo-key":1352,"mdc-qnnwtc-key":1398},{"content":4,"quizQuestionContent":123,"type":142,"pageMeta":143},[5,9,13,17,20,24,27,31,35,38,42,45,49,53,57,60,64,67,71,74,78,82,85,89,92,96,99,103,107,110,113,117,120],{"id":6,"value":7,"isTypeH1":8},"1929","Отличия HTTP/1.0, 1.1, 2 и 3: протокол и транспорт",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4453","Теория: что сравнивается","theory-what-is-being-compared",{"id":14,"value":15,"anchor":16,"isTypeH3":8},"4465","Семантика против “провода”","semantics-versus-on-the-wire",{"id":18,"value":19,"isTypeParagraph":8},"10240","HTTP описывает архитектуру request/response, роли клиента/сервера и общий формат сообщений.  \nНачиная с HTTP/2, принципиально меняется не “смысл HTTP”, а его представление на уровне передачи: появляются бинарные кадры, сжатие заголовков, параллельные обмены.  \nHTTP/3 продолжает этот подход: это перенос тех же смыслов HTTP на другой транспорт (QUIC), при котором часть задач (потоки, контроль потока, восстановление потерь, безопасность) “спускается” в транспортный уровень.",{"id":21,"value":22,"anchor":23,"isTypeH3":8},"4466","Что обычно отличают на практике","what-is-usually-different-in-practice",{"id":25,"value":26,"isTypeParagraph":8},"10241","При сравнении версий HTTP обычно оцениваются: стоимость установления соединения, возможность параллельной загрузки, накладные расходы заголовков, устойчивость к head-of-line blocking, поведение через прокси/балансировщики.  \nВ HTTP/1.1 сообщение определяется как стартовая строка + заголовки + пустая строка + опциональное тело, и парсинг должен быть строго “по байтам”, иначе возможны неоднозначности и уязвимости.",{"id":28,"value":29,"anchor":30,"isTypeH2":8},"4454","HTTP/1.0 и HTTP/1.1","http-1-0-and-http-1-1",{"id":32,"value":33,"anchor":34,"isTypeH3":8},"4467","HTTP/1.0: “одно соединение — один запрос”","http-1-0-one-connection-one-request",{"id":36,"value":37,"isTypeParagraph":8},"10242","HTTP/1.0 исторически часто воспринимается как модель “клиент открыл TCP-соединение → сделал запрос → получил ответ → соединение закрыто”, из‑за чего серия запросов к странице (HTML, CSS, изображения) приводила к множеству соединений и лишним задержкам.  \nПротокол закрепляет парадигму request/response: запрос содержит метод, URI и версию протокола, затем MIME‑подобные заголовки и возможное тело; ответ содержит статусную строку, заголовки и возможное тело.  \nВ HTTP/1.0 встречались “терпимые” реализации, но уже на этом уровне важно избегать двусмысленных конструкций в заголовках.\n\nПример обмена в стиле HTTP/1.0 (показан принцип, когда после ответа соединение логически завершается):\n\n```\nGET /index.html HTTP/1.0\nUser-Agent: demo-client\n\nHTTP/1.0 200 OK\nContent-Type: text/html\nContent-Length: 13\n\nHello, world!\n```",{"id":39,"value":40,"anchor":41,"isTypeH3":8},"4468","HTTP/1.1: стандартная база 1.x и более строгая маршрутизация/синтаксис","http-1-1-standard-base-of-1-x",{"id":43,"value":44,"isTypeParagraph":8},"10243","HTTP/1.1 фиксирует строгие требования к разбору сообщений и маршрутизации, включая то, что HTTP-сообщение должно парситься как последовательность октетов (а не как “строки”), иначе возникают риски неоднозначной интерпретации переводов строк и разделителей.  \nВ HTTP/1.1 одно TCP-соединение может переиспользоваться для нескольких последовательных обменов request/response, что экономит время и ресурсы по сравнению с “под каждый запрос отдельное соединение”.  \nHTTP/1.1 также стандартизирует и уточняет множество деталей совместимости и поведения промежуточных узлов (прокси, шлюзов).\n\nПример “типичного” HTTP/1.1-запроса с обязательным `Host` и версией в стартовой строке:\n\n```\nGET /hello.txt HTTP/1.1\nHost: www.example.com\nUser-Agent: demo-client\nAccept-Language: en\n\nHTTP/1.1 200 OK\nContent-Type: text/plain\nContent-Length: 5\n\nHello\n```",{"id":46,"description":47,"titleAlert":48,"isTypeAlertWarning":8},"728","На уровне HTTP/1.1 наиболее частые проблемы безопасности и совместимости возникают из‑за неправильного/слишком “терпимого” парсинга запросов и ответов на границе прокси/балансировщиков, поэтому корректная обработка разделителей, длины тела и некорректных сообщений критична.\n",null,{"id":50,"value":51,"anchor":52,"isTypeH2":8},"4455","HTTP/2: бинарный фрейминг и мультиплексирование","http-2-binary-framing-and-multiplexing",{"id":54,"value":55,"anchor":56,"isTypeH3":8},"4469","Главная идея HTTP/2","main-idea-of-http-2",{"id":58,"value":59,"isTypeParagraph":8},"10244","HTTP/2 — оптимизированный способ “выразить” семантику HTTP на проводе так, чтобы эффективнее использовать сеть и уменьшить задержки загрузки.  \nКлючевые механизмы: бинарный фрейминг, мультиплексирование потоков в одном соединении, сжатие заголовков, а также server push (исторически — спорная функция, так как на практике может быть неэффективной при неправильном применении).  \nHTTP/2 не отменяет смысловую модель HTTP/1.1: методы, статусы, URI и большинство заголовков остаются теми же, меняется способ передачи.",{"id":61,"value":62,"anchor":63,"isTypeH3":8},"4470","Потоки (streams) и кадры (frames)","streams-and-frames",{"id":65,"value":66,"isTypeParagraph":8},"10245","Одно HTTP/2-соединение содержит несколько потоков (streams), а данные передаются кадрами (frames); кадры разных потоков могут перемежаться в одном соединении.  \nВнутри каждого потока порядок кадров важен: например, сначала идут заголовки, затем данные, и получатель должен соблюдать правила состояния потока.  \nHTTP/2 работает с теми же схемами URI `http`/`https` и теми же портами по умолчанию (80/443), а включение HTTP/2 требует механизма обнаружения/переговоров.",{"id":68,"value":69,"anchor":70,"isTypeH3":8},"4471","Negotiation: ALPN и Upgrade","negotiation-alpn-and-upgrade",{"id":72,"value":73,"isTypeParagraph":8},"10246","Для TLS-варианта HTTP/2 идентификатор протокола в ALPN — `h2`.  \nДля варианта поверх “чистого” TCP используется `h2c`, и он может согласовываться через заголовки `Upgrade`/`HTTP2-Settings`, если старт происходит как HTTP/1.1.\n\nМини-пример попытки апгрейда до h2c (показан общий вид):\n\n```\nGET / HTTP/1.1\nHost: server.example.com\nConnection: Upgrade, HTTP2-Settings\nUpgrade: h2c\nHTTP2-Settings: \u003Cbase64url-encoding-of-settings>\n\nHTTP/1.1 101 Switching Protocols\nConnection: Upgrade\nUpgrade: h2c\n\n\u003Cдалее идут HTTP/2 frames>\n```",{"id":75,"value":76,"anchor":77,"isTypeH2":8},"4456","HTTP/3: HTTP поверх QUIC (UDP)","http-3-http-over-quic-udp",{"id":79,"value":80,"anchor":81,"isTypeH3":8},"4472","Что такое QUIC в контексте HTTP/3","what-quic-means-for-http-3",{"id":83,"value":84,"isTypeParagraph":8},"10247","QUIC — транспорт поверх UDP, который даёт приложению концепцию потоков (streams), мультиплексирование, контроль потока, восстановление потерь, а также криптографическую защиту и ускоренное установление соединения по сравнению с классической связкой TCP+TLS.  \nВ QUIC безопасность и согласование ключей тесно интегрированы с установлением соединения, что уменьшает количество “шагов” до начала передачи данных.  \nHTTP/3 использует эти свойства QUIC, чтобы снизить взаимные блокировки между параллельными запросами и лучше переживать потери/переключения сетевых путей.",{"id":86,"value":87,"anchor":88,"isTypeH3":8},"4473","HTTP/3 как “маппинг” поверх QUIC","http-3-as-a-mapping-over-quic",{"id":90,"value":91,"isTypeParagraph":8},"10248","HTTP/3 описывает отображение семантики HTTP на QUIC и во многом наследует идеи HTTP/2, но делегирует QUIC жизненный цикл потоков и контроль потока.  \nHTTP/3 опирается на QUIC для конфиденциальности/целостности, аутентификации пира и надёжной, упорядоченной доставки в рамках каждого потока.  \nДля выбора HTTP/3 при TLS‑переговорах используется ALPN‑токен `h3`.",{"id":93,"value":94,"anchor":95,"isTypeH3":8},"4474","Строгость к ошибкам и контрольные потоки","strictness-errors-and-control-streams",{"id":97,"value":98,"isTypeParagraph":8},"10249","HTTP/3 требует от промежуточных узлов не пересылать некорректно сформированные запросы/ответы и трактует malformed сообщения как ошибку потока определённого типа.  \nКаждая сторона должна открыть control stream и отправить SETTINGS первым кадром на нём; нарушение этого правила считается ошибкой соединения.\n\nПример (схематично) установления:\n```\nDNS/адрес\n  ↓\nQUIC handshake + TLS (ALPN: h3)\n  ↓\nСоздание control stream\n  ↓\nSETTINGS frame (первым)\n  ↓\nRequest streams (параллельно, независимо)\n```",{"id":100,"value":101,"anchor":102,"isTypeH2":8},"4457","Практика: таблицы, схемы, примеры и ответы","practice-tables-diagrams-examples-and-answers",{"id":104,"value":105,"anchor":106,"isTypeH3":8},"4475","Таблица отличий (суть)","differences-table-the-essence",{"id":108,"value":109,"isTypeParagraph":8},"10250","| Версия | Транспорт | Формат “на проводе” | Параллелизм | Ключевой выигрыш | Типовая проблема |\n|---|---|---|---|---|---|\n| HTTP/1.0 | TCP | Текстовые строки + заголовки | В основном последовательно; часто новое соединение под запрос | Простота и совместимость | Высокая цена множества соединений и задержек на установление |\n| HTTP/1.1 | TCP | Текстовые сообщения со строгим парсингом | Несколько обменов в одном соединении (последовательно) | Переиспользование соединения, единые правила | Уязвимости/ошибки из‑за неправильного парсинга и “терпимых” прокси |\n| HTTP/2 | Обычно TCP (часто через TLS) | Бинарные frames, streams | Мультиплексирование потоков в одном соединении | Меньше задержек, эффективнее сеть, сжатие заголовков, push | HOL на уровне TCP при потерях пакетов сохраняется |\n| HTTP/3 | QUIC поверх UDP (+TLS внутри QUIC) | Бинарная модель поверх QUIC-streams | Мультиплексирование с независимыми потоками | Меньше HOL между потоками, быстрее старт, миграция пути | UDP может фильтроваться, инфраструктуру необходимо настроить |\n",{"id":111,"description":112,"titleAlert":48,"isTypeAlertInfo":8},"669","Полезно воспринимать HTTP/2 и HTTP/3 как разные “упаковки” одних и тех же HTTP-смыслов: меняется не то, что означает запрос/ответ, а то, как они кодируются и доставляются.",{"id":114,"value":115,"anchor":116,"isTypeH3":8},"4476","Мини-примеры: “как выглядит” различие","mini-examples-how-the-difference-looks",{"id":118,"value":119,"isTypeParagraph":8},"10251","HTTP/1.1 — читаемый текст с разделением заголовков и тела:\n```\nGET /resource HTTP/1.1\nHost: example.com\nAccept: text/html\n\nHTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 3\n\nok!\n```\n\nHTTP/2 — после согласования идут бинарные кадры, а один канал содержит много потоков, кадры потоков перемежаются:\n```\n[STREAM 1] HEADERS\n[STREAM 3] HEADERS\n[STREAM 1] DATA chunk #1\n[STREAM 3] DATA chunk #1\n[STREAM 1] DATA chunk #2\n...\n```\n\nHTTP/3 — похожая идея потоков, но транспорт QUIC сам даёт streams/flow-control и безопасность, поэтому HTTP/3 описывает отображение HTTP поверх QUIC:\n```\nQUIC stream (request) -> HTTP request mapping\nQUIC stream (response)-> HTTP response mapping\nControl stream -> SETTINGS first\n```",{"id":121,"value":122,"isTypeParagraph":8},"10252","**Кратко**: HTTP/1.0, HTTP/1.1, HTTP/2 и HTTP/3 передают одни и те же базовые HTTP-смыслы (методы, статусы, заголовки, URI), но существенно отличаются тем, как кодируются и доставляются сообщения по сети, а также тем, как устроены соединения и параллелизм.  \nКлючевая эволюция: от простого текстового формата и частых TCP-соединений (1.0) к устойчивым соединениям и более строгим правилам (1.1), затем к бинарному фреймингу и мультиплексированию в одном соединении (2), и далее — к переносу HTTP поверх QUIC/UDP с меньшими задержками установления и лучшей устойчивостью к блокировкам (3).",{"id":124,"options":125,"hint":139,"solution":140,"description":141},"1159",[126,130,133,136],{"id":127,"label":128,"isCorrect":129},"4780","HTTP/1.0 уже имел мультиплексирование нескольких запросов в одном соединении с бинарным фреймингом, HTTP/1.1 добавил только server push; HTTP/2 отменил streams и вернулся к одному запросу на соединение; HTTP/3 использует `h2` в ALPN и описывает полную замену семантики HTTP на новую, несовместимую с 1.x.  ",false,{"id":131,"label":132,"isCorrect":129},"4781","HTTP/1.0 всегда требовал заголовок `Host` и постоянное соединение, HTTP/1.1 всегда закрывал соединение после ответа; HTTP/2 использует исключительно текстовые сообщения, чтобы их было удобно отлаживать; HTTP/3 работает строго поверх TCP, потому что UDP не позволяет надёжную доставку и упорядочивание.  ",{"id":134,"label":135,"isCorrect":8},"4782","HTTP/1.0 обычно предполагал короткоживущее TCP‑соединение на запрос, HTTP/1.1 допускает переиспользование соединения и требует строгий октетный парсинг, HTTP/2 вводит бинарные кадры и мультиплексирование потоков со сжатием заголовков, а HTTP/3 переносит HTTP на QUIC/UDP с ALPN `h3`, используя QUIC для streams, безопасности и быстрого установления.  ",{"id":137,"label":138,"isCorrect":129},"4783","HTTP/1.0 и HTTP/1.1 отличаются только количеством статус‑кодов, а формат сообщений и модель соединения одинаковые; HTTP/2 меняет только номера портов по умолчанию и запрещает TLS; HTTP/3 — это тот же HTTP/2, но с обязательным апгрейдом через `Upgrade: h2c` и без участия QUIC.  ","Следует разделить различия на три слоя: (1) семантика HTTP (методы/статусы/смыслы), (2) формат передачи “на проводе” (текст против бинарных кадров), (3) транспорт (TCP против QUIC/UDP) и его свойства (мультиплексирование, handshakes, блокировки).","**Правильный ответ: 3** - HTTP/1.0 обычно предполагал короткоживущее TCP‑соединение на запрос, HTTP/1.1 допускает переиспользование соединения и требует строгий октетный парсинг, HTTP/2 вводит бинарные кадры и мультиплексирование потоков со сжатием заголовков, а HTTP/3 переносит HTTP на QUIC/UDP с ALPN `h3`, используя QUIC для streams, безопасности и быстрого установления.  ","Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","quizQuestion",{"title":144,"description":145,"ogTitle":7,"ogDescription":145,"ogImageUrl":146,"canonical":48,"ogLocale":147,"ogSiteName":148,"ogImageType":149,"ogImageWidth":150,"ogImageHeight":151,"ogType":152,"ogUrl":48},"Эволюция протокола HTTP: ключевые отличия версий 1.0–3.0","Подробное сравнение HTTP/1.0–HTTP/3: синтаксис, соединения, мультиплексирование, QUIC, примеры запросов и таблицы.","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":154,"siteUrl":155},"GOOD WEB JOB!","https://goodwebjob.ru",[157],{"label":158,"slug":159,"to":160},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":162,"navigationSublist":170},[163,166],{"path":160,"isActive":129,"name":164,"icon":165,"isNavbarMobileDisabled":8},"С чего начать?","material-symbols:visibility-outline-rounded",{"path":167,"isActive":8,"name":168,"icon":169,"isNavbarMobileDisabled":129},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[171,180,207,219,225,366,390,399,405,467,488,494],{"title":172,"list":173,"isOpened":129},"Bash",[174,177],{"name":175,"path":176,"isActive":129},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":178,"path":179,"isActive":129},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":181,"list":182,"isOpened":129},"CSS",[183,186,189,192,195,198,201,204],{"name":184,"path":185,"isActive":129},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":187,"path":188,"isActive":129},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":190,"path":191,"isActive":129},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":193,"path":194,"isActive":129},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":196,"path":197,"isActive":129},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":199,"path":200,"isActive":129},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":202,"path":203,"isActive":129},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":205,"path":206,"isActive":129},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":208,"list":209,"isOpened":129},"Git",[210,213,216],{"name":211,"path":212,"isActive":129},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":214,"path":215,"isActive":129},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":217,"path":218,"isActive":129},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":220,"list":221,"isOpened":129},"HTML",[222],{"name":223,"path":224,"isActive":129},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":226,"list":227,"isOpened":129},"JavaScript",[228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363],{"name":229,"path":230,"isActive":129},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":232,"path":233,"isActive":129},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":235,"path":236,"isActive":129},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":238,"path":239,"isActive":129},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":241,"path":242,"isActive":129},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":244,"path":245,"isActive":129},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":247,"path":248,"isActive":129},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":250,"path":251,"isActive":129},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":253,"path":254,"isActive":129},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":256,"path":257,"isActive":129},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":259,"path":260,"isActive":129},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":262,"path":263,"isActive":129},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":265,"path":266,"isActive":129},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":268,"path":269,"isActive":129},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":271,"path":272,"isActive":129},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":274,"path":275,"isActive":129},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":277,"path":278,"isActive":129},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":280,"path":281,"isActive":129},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":283,"path":284,"isActive":129},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":286,"path":287,"isActive":129},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":289,"path":290,"isActive":129},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":292,"path":293,"isActive":129},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":295,"path":296,"isActive":129},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":298,"path":299,"isActive":129},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":301,"path":302,"isActive":129},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":304,"path":305,"isActive":129},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":307,"path":308,"isActive":129},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":310,"path":311,"isActive":129},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":313,"path":314,"isActive":129},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":316,"path":317,"isActive":129},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":319,"path":320,"isActive":129},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":322,"path":323,"isActive":129},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":325,"path":326,"isActive":129},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":328,"path":329,"isActive":129},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":331,"path":332,"isActive":129},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":334,"path":335,"isActive":129},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":337,"path":338,"isActive":129}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":340,"path":341,"isActive":129},"Напишите функцию, который сделает из массива объект","/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":343,"path":344,"isActive":129},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":346,"path":347,"isActive":129},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":349,"path":350,"isActive":129},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":352,"path":353,"isActive":129},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":355,"path":356,"isActive":129},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":358,"path":359,"isActive":129},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":361,"path":362,"isActive":129},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":364,"path":365,"isActive":129},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":367,"list":368,"isOpened":129},"React",[369,372,375,378,381,384,387],{"name":370,"path":371,"isActive":129},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":373,"path":374,"isActive":129},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":376,"path":377,"isActive":129},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":379,"path":380,"isActive":129},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":382,"path":383,"isActive":129},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":385,"path":386,"isActive":129},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":388,"path":389,"isActive":129},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":391,"list":392,"isOpened":129},"Алгоритмы",[393,396],{"name":394,"path":395,"isActive":129},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":397,"path":398,"isActive":129},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":400,"list":401,"isOpened":129},"Дебаггинг",[402],{"name":403,"path":404,"isActive":129},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":406,"list":407,"isOpened":129},"Компьютерные сети",[408,411,414,417,420,423,426,429,432,435,438,440,443,446,449,452,455,458,461,464],{"name":409,"path":410,"isActive":129},"Как браузер после ввода домена понимает, откуда брать сайт?","/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":412,"path":413,"isActive":129},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":415,"path":416,"isActive":129},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":418,"path":419,"isActive":129},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":421,"path":422,"isActive":129},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":424,"path":425,"isActive":129},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":427,"path":428,"isActive":129},"Что такое HTTP и из чего состоит?","/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":430,"path":431,"isActive":129},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":433,"path":434,"isActive":129},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":436,"path":437,"isActive":129},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":141,"path":439,"isActive":129},"/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":441,"path":442,"isActive":129},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":444,"path":445,"isActive":129},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":447,"path":448,"isActive":129},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":450,"path":451,"isActive":129},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":453,"path":454,"isActive":129},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":456,"path":457,"isActive":129},"Всё, что идет по HTTPS – оно защищено?","/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":459,"path":460,"isActive":129},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":462,"path":463,"isActive":129},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":465,"path":466,"isActive":129},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":468,"list":469,"isOpened":129},"Отрисовка в браузере",[470,473,476,479,482,485],{"name":471,"path":472,"isActive":129},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":474,"path":475,"isActive":129},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":477,"path":478,"isActive":129},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":480,"path":481,"isActive":129},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":483,"path":484,"isActive":129},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":486,"path":487,"isActive":129},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":489,"list":490,"isOpened":129},"Ревью кода",[491],{"name":492,"path":493,"isActive":129},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":495,"list":496,"isOpened":129},"Теория вероятности",[497,500,503],{"name":498,"path":499,"isActive":129},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":501,"path":502,"isActive":129},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":504,"path":505,"isActive":129},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"slugs":507},[508,511,513,515,517,520,523,525,527,529,531,533,536,538,540,542,544,546,548,550,552,554,556,558,560,562,564,566,568,570,572,574,576,578,580,582,584,586,588,590,592,594,596,598,600,602,604,606,608,610,612,614,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667,669,671,673,675,677,679,681,683,685,687,689,691,693,695,697,699,701,703,705,707,709,711,713,715,717,718,720,722,724,726],{"name":509,"value":510},"Теоретические задания","theoretical-tasks",{"name":265,"value":512},"what-this-code-will-return-typeof-function",{"name":164,"value":514},"where-to-begin",{"name":232,"value":516},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":518,"value":519},"Backend","backend",{"name":521,"value":522},"Frontend","frontend",{"name":229,"value":524},"prototype-what-logical-values-will-be-received-in-console-log",{"name":346,"value":526},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":337,"value":528},"find-non-repeating-numbers-in-an-array",{"name":310,"value":530},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":316,"value":532},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":534,"value":535},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":322,"value":537},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":238,"value":539},"what-value-will-the-console-output-with-object-property",{"name":241,"value":541},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":313,"value":543},"returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":343,"value":545},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":349,"value":547},"determines-whether-a-word-is-a-palindrome",{"name":328,"value":549},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":355,"value":551},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":319,"value":553},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":325,"value":555},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":331,"value":557},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":364,"value":559},"the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":334,"value":561},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":340,"value":563},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":244,"value":565},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":247,"value":567},"there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":259,"value":569},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":262,"value":571},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":361,"value":573},"unifying-values-in-an-array",{"name":352,"value":575},"flattening-the-array",{"name":250,"value":577},"what-will-the-book-get-upper-name-method-return",{"name":358,"value":579},"string-compression",{"name":256,"value":581},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":268,"value":583},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":409,"value":585},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":415,"value":587},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":418,"value":589},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":421,"value":591},"key-differences-between-tcp-and-udp",{"name":424,"value":593},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":427,"value":595},"what-is-http-and-what-does-it-consist-of",{"name":430,"value":597},"what-are-http-headers-and-why-do-we-need-them",{"name":433,"value":599},"what-are-http-parameters",{"name":436,"value":601},"where-is-the-html-code-located-in-the-http-response-structure",{"name":223,"value":603},"what-is-html",{"name":141,"value":605},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":441,"value":607},"the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":444,"value":609},"what-is-a-cookie",{"name":447,"value":611},"who-initiates-the-cookie-recording-in-the-browser",{"name":450,"value":613},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":615,"value":616},"Лайвкодинг","livecoding",{"name":235,"value":618},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":456,"value":620},"is-everything-that-goes-through-https-secure",{"name":459,"value":622},"all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":462,"value":624},"there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":474,"value":626},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":471,"value":628},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":477,"value":630},"what-is-blocking-the-page-rendering-in-the-browser",{"name":480,"value":632},"what-is-dom-in-a-browser-what-is-cssom",{"name":483,"value":634},"what-are-nodes-in-the-dom",{"name":486,"value":636},"what-does-cssom-consist-of",{"name":184,"value":638},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":187,"value":640},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":190,"value":642},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":193,"value":644},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":196,"value":646},"there-is-an-html-code-will-font-weight-affect-span",{"name":199,"value":648},"what-are-the-differences-between-flexbox-and-grid",{"name":202,"value":650},"do-flexbox-and-grid-replace-each-other",{"name":205,"value":652},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":168,"value":654},"tasks",{"name":271,"value":656},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":274,"value":658},"what-is-this-in-javascript",{"name":277,"value":660},"what-is-an-event-loop-and-how-does-it-work",{"name":280,"value":662},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":283,"value":664},"what-does-the-typeof-operator-show-in-javascript",{"name":286,"value":666},"what-types-of-data-exist-in-javascript",{"name":289,"value":668},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":292,"value":670},"what-will-typeof-return-for-an-array",{"name":295,"value":672},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":298,"value":674},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":301,"value":676},"what-does-typeof-return-for-new-set-in-javascript",{"name":370,"value":678},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":376,"value":680},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":379,"value":682},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":382,"value":684},"there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":385,"value":686},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":403,"value":688},"how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":211,"value":690},"developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":214,"value":692},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":217,"value":694},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":492,"value":696},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":175,"value":698},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":178,"value":700},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":394,"value":702},"what-is-algorithmic-complexity",{"name":397,"value":704},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":304,"value":706},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":465,"value":708},"how-can-a-user-be-authorized-on-a-website",{"name":307,"value":710},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":498,"value":712},"there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":501,"value":714},"there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":504,"value":716},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":158,"value":159},{"name":453,"value":719},"is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":412,"value":721},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":253,"value":723},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":373,"value":725},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":388,"value":727},"what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"cooperation":729,"copyright":732,"reportError":733,"socialNetwork":735},{"link":730,"title":731},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":734,"link":730},"Сообщить об ошибке",{"label":736,"socialNetworkList":737},"Мы в соцсетях:",[738,741,744],{"icon":48,"link":739,"title":740},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":742,"link":730,"title":743},"ic:baseline-telegram","Telegram",{"icon":745,"link":746,"title":747},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":749,"body":750},{},{"type":751,"children":752},"root",[753],{"type":754,"tag":755,"props":756,"children":757},"element","p",{},[758],{"type":759,"value":141},"text",{"data":761,"body":762},{},{"type":751,"children":763},[764],{"type":754,"tag":755,"props":765,"children":766},{},[767,769,776],{"type":759,"value":768},"HTTP/1.0 уже имел мультиплексирование нескольких запросов в одном соединении с бинарным фреймингом, HTTP/1.1 добавил только server push; HTTP/2 отменил streams и вернулся к одному запросу на соединение; HTTP/3 использует ",{"type":754,"tag":770,"props":771,"children":773},"code",{"className":772},[],[774],{"type":759,"value":775},"h2",{"type":759,"value":777}," в ALPN и описывает полную замену семантики HTTP на новую, несовместимую с 1.x.",{"data":779,"body":780},{},{"type":751,"children":781},[782],{"type":754,"tag":755,"props":783,"children":784},{},[785,787,793],{"type":759,"value":786},"HTTP/1.0 всегда требовал заголовок ",{"type":754,"tag":770,"props":788,"children":790},{"className":789},[],[791],{"type":759,"value":792},"Host",{"type":759,"value":794}," и постоянное соединение, HTTP/1.1 всегда закрывал соединение после ответа; HTTP/2 использует исключительно текстовые сообщения, чтобы их было удобно отлаживать; HTTP/3 работает строго поверх TCP, потому что UDP не позволяет надёжную доставку и упорядочивание.",{"data":796,"body":797},{},{"type":751,"children":798},[799],{"type":754,"tag":755,"props":800,"children":801},{},[802,804,810],{"type":759,"value":803},"HTTP/1.0 обычно предполагал короткоживущее TCP‑соединение на запрос, HTTP/1.1 допускает переиспользование соединения и требует строгий октетный парсинг, HTTP/2 вводит бинарные кадры и мультиплексирование потоков со сжатием заголовков, а HTTP/3 переносит HTTP на QUIC/UDP с ALPN ",{"type":754,"tag":770,"props":805,"children":807},{"className":806},[],[808],{"type":759,"value":809},"h3",{"type":759,"value":811},", используя QUIC для streams, безопасности и быстрого установления.",{"data":813,"body":814},{},{"type":751,"children":815},[816],{"type":754,"tag":755,"props":817,"children":818},{},[819,821,827],{"type":759,"value":820},"HTTP/1.0 и HTTP/1.1 отличаются только количеством статус‑кодов, а формат сообщений и модель соединения одинаковые; HTTP/2 меняет только номера портов по умолчанию и запрещает TLS; HTTP/3 — это тот же HTTP/2, но с обязательным апгрейдом через ",{"type":754,"tag":770,"props":822,"children":824},{"className":823},[],[825],{"type":759,"value":826},"Upgrade: h2c",{"type":759,"value":828}," и без участия QUIC.",{"data":830,"body":831},{},{"type":751,"children":832},[833],{"type":754,"tag":755,"props":834,"children":835},{},[836],{"type":759,"value":139},{"data":838,"body":839},{},{"type":751,"children":840},[841],{"type":754,"tag":755,"props":842,"children":843},{},[844,850,852,857],{"type":754,"tag":845,"props":846,"children":847},"strong",{},[848],{"type":759,"value":849},"Правильный ответ: 3",{"type":759,"value":851}," - HTTP/1.0 обычно предполагал короткоживущее TCP‑соединение на запрос, HTTP/1.1 допускает переиспользование соединения и требует строгий октетный парсинг, HTTP/2 вводит бинарные кадры и мультиплексирование потоков со сжатием заголовков, а HTTP/3 переносит HTTP на QUIC/UDP с ALPN ",{"type":754,"tag":770,"props":853,"children":855},{"className":854},[],[856],{"type":759,"value":809},{"type":759,"value":811},{"data":859,"body":860},{},{"type":751,"children":861},[862],{"type":754,"tag":755,"props":863,"children":864},{},[865,867,871,873,876],{"type":759,"value":866},"HTTP описывает архитектуру request/response, роли клиента/сервера и общий формат сообщений.",{"type":754,"tag":868,"props":869,"children":870},"br",{},[],{"type":759,"value":872},"\nНачиная с HTTP/2, принципиально меняется не “смысл HTTP”, а его представление на уровне передачи: появляются бинарные кадры, сжатие заголовков, параллельные обмены.",{"type":754,"tag":868,"props":874,"children":875},{},[],{"type":759,"value":877},"\nHTTP/3 продолжает этот подход: это перенос тех же смыслов HTTP на другой транспорт (QUIC), при котором часть задач (потоки, контроль потока, восстановление потерь, безопасность) “спускается” в транспортный уровень.",{"data":879,"body":880},{},{"type":751,"children":881},[882],{"type":754,"tag":755,"props":883,"children":884},{},[885,887,890],{"type":759,"value":886},"При сравнении версий HTTP обычно оцениваются: стоимость установления соединения, возможность параллельной загрузки, накладные расходы заголовков, устойчивость к head-of-line blocking, поведение через прокси/балансировщики.",{"type":754,"tag":868,"props":888,"children":889},{},[],{"type":759,"value":891},"\nВ HTTP/1.1 сообщение определяется как стартовая строка + заголовки + пустая строка + опциональное тело, и парсинг должен быть строго “по байтам”, иначе возможны неоднозначности и уязвимости.",{"data":893,"body":894},{},{"type":751,"children":895},[896,911,916],{"type":754,"tag":755,"props":897,"children":898},{},[899,901,904,906,909],{"type":759,"value":900},"HTTP/1.0 исторически часто воспринимается как модель “клиент открыл TCP-соединение → сделал запрос → получил ответ → соединение закрыто”, из‑за чего серия запросов к странице (HTML, CSS, изображения) приводила к множеству соединений и лишним задержкам.",{"type":754,"tag":868,"props":902,"children":903},{},[],{"type":759,"value":905},"\nПротокол закрепляет парадигму request/response: запрос содержит метод, URI и версию протокола, затем MIME‑подобные заголовки и возможное тело; ответ содержит статусную строку, заголовки и возможное тело.",{"type":754,"tag":868,"props":907,"children":908},{},[],{"type":759,"value":910},"\nВ HTTP/1.0 встречались “терпимые” реализации, но уже на этом уровне важно избегать двусмысленных конструкций в заголовках.",{"type":754,"tag":755,"props":912,"children":913},{},[914],{"type":759,"value":915},"Пример обмена в стиле HTTP/1.0 (показан принцип, когда после ответа соединение логически завершается):",{"type":754,"tag":917,"props":918,"children":922},"pre",{"className":919,"code":921,"language":759},[920],"language-text","GET /index.html HTTP/1.0\nUser-Agent: demo-client\n\nHTTP/1.0 200 OK\nContent-Type: text/html\nContent-Length: 13\n\nHello, world!\n",[923],{"type":754,"tag":770,"props":924,"children":926},{"__ignoreMap":925},"",[927],{"type":759,"value":921},{"data":929,"body":930},{},{"type":751,"children":931},[932,947,959],{"type":754,"tag":755,"props":933,"children":934},{},[935,937,940,942,945],{"type":759,"value":936},"HTTP/1.1 фиксирует строгие требования к разбору сообщений и маршрутизации, включая то, что HTTP-сообщение должно парситься как последовательность октетов (а не как “строки”), иначе возникают риски неоднозначной интерпретации переводов строк и разделителей.",{"type":754,"tag":868,"props":938,"children":939},{},[],{"type":759,"value":941},"\nВ HTTP/1.1 одно TCP-соединение может переиспользоваться для нескольких последовательных обменов request/response, что экономит время и ресурсы по сравнению с “под каждый запрос отдельное соединение”.",{"type":754,"tag":868,"props":943,"children":944},{},[],{"type":759,"value":946},"\nHTTP/1.1 также стандартизирует и уточняет множество деталей совместимости и поведения промежуточных узлов (прокси, шлюзов).",{"type":754,"tag":755,"props":948,"children":949},{},[950,952,957],{"type":759,"value":951},"Пример “типичного” HTTP/1.1-запроса с обязательным ",{"type":754,"tag":770,"props":953,"children":955},{"className":954},[],[956],{"type":759,"value":792},{"type":759,"value":958}," и версией в стартовой строке:",{"type":754,"tag":917,"props":960,"children":963},{"className":961,"code":962,"language":759},[920],"GET /hello.txt HTTP/1.1\nHost: www.example.com\nUser-Agent: demo-client\nAccept-Language: en\n\nHTTP/1.1 200 OK\nContent-Type: text/plain\nContent-Length: 5\n\nHello\n",[964],{"type":754,"tag":770,"props":965,"children":966},{"__ignoreMap":925},[967],{"type":759,"value":962},{"data":969,"body":970},{},{"type":751,"children":971},[972],{"type":754,"tag":755,"props":973,"children":974},{},[975],{"type":759,"value":976},"На уровне HTTP/1.1 наиболее частые проблемы безопасности и совместимости возникают из‑за неправильного/слишком “терпимого” парсинга запросов и ответов на границе прокси/балансировщиков, поэтому корректная обработка разделителей, длины тела и некорректных сообщений критична.",{"data":978,"body":979},{},{"type":751,"children":980},[981],{"type":754,"tag":755,"props":982,"children":983},{},[984,986,989,991,994],{"type":759,"value":985},"HTTP/2 — оптимизированный способ “выразить” семантику HTTP на проводе так, чтобы эффективнее использовать сеть и уменьшить задержки загрузки.",{"type":754,"tag":868,"props":987,"children":988},{},[],{"type":759,"value":990},"\nКлючевые механизмы: бинарный фрейминг, мультиплексирование потоков в одном соединении, сжатие заголовков, а также server push (исторически — спорная функция, так как на практике может быть неэффективной при неправильном применении).",{"type":754,"tag":868,"props":992,"children":993},{},[],{"type":759,"value":995},"\nHTTP/2 не отменяет смысловую модель HTTP/1.1: методы, статусы, URI и большинство заголовков остаются теми же, меняется способ передачи.",{"data":997,"body":998},{},{"type":751,"children":999},[1000],{"type":754,"tag":755,"props":1001,"children":1002},{},[1003,1005,1008,1010,1013,1015,1021,1023,1029],{"type":759,"value":1004},"Одно HTTP/2-соединение содержит несколько потоков (streams), а данные передаются кадрами (frames); кадры разных потоков могут перемежаться в одном соединении.",{"type":754,"tag":868,"props":1006,"children":1007},{},[],{"type":759,"value":1009},"\nВнутри каждого потока порядок кадров важен: например, сначала идут заголовки, затем данные, и получатель должен соблюдать правила состояния потока.",{"type":754,"tag":868,"props":1011,"children":1012},{},[],{"type":759,"value":1014},"\nHTTP/2 работает с теми же схемами URI ",{"type":754,"tag":770,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":759,"value":1020},"http",{"type":759,"value":1022},"/",{"type":754,"tag":770,"props":1024,"children":1026},{"className":1025},[],[1027],{"type":759,"value":1028},"https",{"type":759,"value":1030}," и теми же портами по умолчанию (80/443), а включение HTTP/2 требует механизма обнаружения/переговоров.",{"data":1032,"body":1033},{},{"type":751,"children":1034},[1035,1075,1080],{"type":754,"tag":755,"props":1036,"children":1037},{},[1038,1040,1045,1047,1050,1052,1058,1060,1066,1067,1073],{"type":759,"value":1039},"Для TLS-варианта HTTP/2 идентификатор протокола в ALPN — ",{"type":754,"tag":770,"props":1041,"children":1043},{"className":1042},[],[1044],{"type":759,"value":775},{"type":759,"value":1046},".",{"type":754,"tag":868,"props":1048,"children":1049},{},[],{"type":759,"value":1051},"\nДля варианта поверх “чистого” TCP используется ",{"type":754,"tag":770,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":759,"value":1057},"h2c",{"type":759,"value":1059},", и он может согласовываться через заголовки ",{"type":754,"tag":770,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":759,"value":1065},"Upgrade",{"type":759,"value":1022},{"type":754,"tag":770,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":759,"value":1072},"HTTP2-Settings",{"type":759,"value":1074},", если старт происходит как HTTP/1.1.",{"type":754,"tag":755,"props":1076,"children":1077},{},[1078],{"type":759,"value":1079},"Мини-пример попытки апгрейда до h2c (показан общий вид):",{"type":754,"tag":917,"props":1081,"children":1084},{"className":1082,"code":1083,"language":759},[920],"GET / HTTP/1.1\nHost: server.example.com\nConnection: Upgrade, HTTP2-Settings\nUpgrade: h2c\nHTTP2-Settings: \u003Cbase64url-encoding-of-settings>\n\nHTTP/1.1 101 Switching Protocols\nConnection: Upgrade\nUpgrade: h2c\n\n\u003Cдалее идут HTTP/2 frames>\n",[1085],{"type":754,"tag":770,"props":1086,"children":1087},{"__ignoreMap":925},[1088],{"type":759,"value":1083},{"data":1090,"body":1091},{},{"type":751,"children":1092},[1093],{"type":754,"tag":755,"props":1094,"children":1095},{},[1096,1098,1101,1103,1106],{"type":759,"value":1097},"QUIC — транспорт поверх UDP, который даёт приложению концепцию потоков (streams), мультиплексирование, контроль потока, восстановление потерь, а также криптографическую защиту и ускоренное установление соединения по сравнению с классической связкой TCP+TLS.",{"type":754,"tag":868,"props":1099,"children":1100},{},[],{"type":759,"value":1102},"\nВ QUIC безопасность и согласование ключей тесно интегрированы с установлением соединения, что уменьшает количество “шагов” до начала передачи данных.",{"type":754,"tag":868,"props":1104,"children":1105},{},[],{"type":759,"value":1107},"\nHTTP/3 использует эти свойства QUIC, чтобы снизить взаимные блокировки между параллельными запросами и лучше переживать потери/переключения сетевых путей.",{"data":1109,"body":1110},{},{"type":751,"children":1111},[1112],{"type":754,"tag":755,"props":1113,"children":1114},{},[1115,1117,1120,1122,1125,1127,1132],{"type":759,"value":1116},"HTTP/3 описывает отображение семантики HTTP на QUIC и во многом наследует идеи HTTP/2, но делегирует QUIC жизненный цикл потоков и контроль потока.",{"type":754,"tag":868,"props":1118,"children":1119},{},[],{"type":759,"value":1121},"\nHTTP/3 опирается на QUIC для конфиденциальности/целостности, аутентификации пира и надёжной, упорядоченной доставки в рамках каждого потока.",{"type":754,"tag":868,"props":1123,"children":1124},{},[],{"type":759,"value":1126},"\nДля выбора HTTP/3 при TLS‑переговорах используется ALPN‑токен ",{"type":754,"tag":770,"props":1128,"children":1130},{"className":1129},[],[1131],{"type":759,"value":809},{"type":759,"value":1046},{"data":1134,"body":1135},{},{"type":751,"children":1136},[1137,1147,1152],{"type":754,"tag":755,"props":1138,"children":1139},{},[1140,1142,1145],{"type":759,"value":1141},"HTTP/3 требует от промежуточных узлов не пересылать некорректно сформированные запросы/ответы и трактует malformed сообщения как ошибку потока определённого типа.",{"type":754,"tag":868,"props":1143,"children":1144},{},[],{"type":759,"value":1146},"\nКаждая сторона должна открыть control stream и отправить SETTINGS первым кадром на нём; нарушение этого правила считается ошибкой соединения.",{"type":754,"tag":755,"props":1148,"children":1149},{},[1150],{"type":759,"value":1151},"Пример (схематично) установления:",{"type":754,"tag":917,"props":1153,"children":1156},{"className":1154,"code":1155,"language":759},[920],"DNS/адрес\n  ↓\nQUIC handshake + TLS (ALPN: h3)\n  ↓\nСоздание control stream\n  ↓\nSETTINGS frame (первым)\n  ↓\nRequest streams (параллельно, независимо)\n",[1157],{"type":754,"tag":770,"props":1158,"children":1159},{"__ignoreMap":925},[1160],{"type":759,"value":1155},{"data":1162,"body":1163},{},{"type":751,"children":1164},[1165],{"type":754,"tag":1166,"props":1167,"children":1168},"table",{},[1169,1208],{"type":754,"tag":1170,"props":1171,"children":1172},"thead",{},[1173],{"type":754,"tag":1174,"props":1175,"children":1176},"tr",{},[1177,1183,1188,1193,1198,1203],{"type":754,"tag":1178,"props":1179,"children":1180},"th",{},[1181],{"type":759,"value":1182},"Версия",{"type":754,"tag":1178,"props":1184,"children":1185},{},[1186],{"type":759,"value":1187},"Транспорт",{"type":754,"tag":1178,"props":1189,"children":1190},{},[1191],{"type":759,"value":1192},"Формат “на проводе”",{"type":754,"tag":1178,"props":1194,"children":1195},{},[1196],{"type":759,"value":1197},"Параллелизм",{"type":754,"tag":1178,"props":1199,"children":1200},{},[1201],{"type":759,"value":1202},"Ключевой выигрыш",{"type":754,"tag":1178,"props":1204,"children":1205},{},[1206],{"type":759,"value":1207},"Типовая проблема",{"type":754,"tag":1209,"props":1210,"children":1211},"tbody",{},[1212,1246,1278,1311],{"type":754,"tag":1174,"props":1213,"children":1214},{},[1215,1221,1226,1231,1236,1241],{"type":754,"tag":1216,"props":1217,"children":1218},"td",{},[1219],{"type":759,"value":1220},"HTTP/1.0",{"type":754,"tag":1216,"props":1222,"children":1223},{},[1224],{"type":759,"value":1225},"TCP",{"type":754,"tag":1216,"props":1227,"children":1228},{},[1229],{"type":759,"value":1230},"Текстовые строки + заголовки",{"type":754,"tag":1216,"props":1232,"children":1233},{},[1234],{"type":759,"value":1235},"В основном последовательно; часто новое соединение под запрос",{"type":754,"tag":1216,"props":1237,"children":1238},{},[1239],{"type":759,"value":1240},"Простота и совместимость",{"type":754,"tag":1216,"props":1242,"children":1243},{},[1244],{"type":759,"value":1245},"Высокая цена множества соединений и задержек на установление",{"type":754,"tag":1174,"props":1247,"children":1248},{},[1249,1254,1258,1263,1268,1273],{"type":754,"tag":1216,"props":1250,"children":1251},{},[1252],{"type":759,"value":1253},"HTTP/1.1",{"type":754,"tag":1216,"props":1255,"children":1256},{},[1257],{"type":759,"value":1225},{"type":754,"tag":1216,"props":1259,"children":1260},{},[1261],{"type":759,"value":1262},"Текстовые сообщения со строгим парсингом",{"type":754,"tag":1216,"props":1264,"children":1265},{},[1266],{"type":759,"value":1267},"Несколько обменов в одном соединении (последовательно)",{"type":754,"tag":1216,"props":1269,"children":1270},{},[1271],{"type":759,"value":1272},"Переиспользование соединения, единые правила",{"type":754,"tag":1216,"props":1274,"children":1275},{},[1276],{"type":759,"value":1277},"Уязвимости/ошибки из‑за неправильного парсинга и “терпимых” прокси",{"type":754,"tag":1174,"props":1279,"children":1280},{},[1281,1286,1291,1296,1301,1306],{"type":754,"tag":1216,"props":1282,"children":1283},{},[1284],{"type":759,"value":1285},"HTTP/2",{"type":754,"tag":1216,"props":1287,"children":1288},{},[1289],{"type":759,"value":1290},"Обычно TCP (часто через TLS)",{"type":754,"tag":1216,"props":1292,"children":1293},{},[1294],{"type":759,"value":1295},"Бинарные frames, streams",{"type":754,"tag":1216,"props":1297,"children":1298},{},[1299],{"type":759,"value":1300},"Мультиплексирование потоков в одном соединении",{"type":754,"tag":1216,"props":1302,"children":1303},{},[1304],{"type":759,"value":1305},"Меньше задержек, эффективнее сеть, сжатие заголовков, push",{"type":754,"tag":1216,"props":1307,"children":1308},{},[1309],{"type":759,"value":1310},"HOL на уровне TCP при потерях пакетов сохраняется",{"type":754,"tag":1174,"props":1312,"children":1313},{},[1314,1319,1324,1329,1334,1339],{"type":754,"tag":1216,"props":1315,"children":1316},{},[1317],{"type":759,"value":1318},"HTTP/3",{"type":754,"tag":1216,"props":1320,"children":1321},{},[1322],{"type":759,"value":1323},"QUIC поверх UDP (+TLS внутри QUIC)",{"type":754,"tag":1216,"props":1325,"children":1326},{},[1327],{"type":759,"value":1328},"Бинарная модель поверх QUIC-streams",{"type":754,"tag":1216,"props":1330,"children":1331},{},[1332],{"type":759,"value":1333},"Мультиплексирование с независимыми потоками",{"type":754,"tag":1216,"props":1335,"children":1336},{},[1337],{"type":759,"value":1338},"Меньше HOL между потоками, быстрее старт, миграция пути",{"type":754,"tag":1216,"props":1340,"children":1341},{},[1342],{"type":759,"value":1343},"UDP может фильтроваться, инфраструктуру необходимо настроить",{"data":1345,"body":1346},{},{"type":751,"children":1347},[1348],{"type":754,"tag":755,"props":1349,"children":1350},{},[1351],{"type":759,"value":112},{"data":1353,"body":1354},{},{"type":751,"children":1355},[1356,1361,1370,1375,1384,1389],{"type":754,"tag":755,"props":1357,"children":1358},{},[1359],{"type":759,"value":1360},"HTTP/1.1 — читаемый текст с разделением заголовков и тела:",{"type":754,"tag":917,"props":1362,"children":1365},{"className":1363,"code":1364,"language":759},[920],"GET /resource HTTP/1.1\nHost: example.com\nAccept: text/html\n\nHTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 3\n\nok!\n",[1366],{"type":754,"tag":770,"props":1367,"children":1368},{"__ignoreMap":925},[1369],{"type":759,"value":1364},{"type":754,"tag":755,"props":1371,"children":1372},{},[1373],{"type":759,"value":1374},"HTTP/2 — после согласования идут бинарные кадры, а один канал содержит много потоков, кадры потоков перемежаются:",{"type":754,"tag":917,"props":1376,"children":1379},{"className":1377,"code":1378,"language":759},[920],"[STREAM 1] HEADERS\n[STREAM 3] HEADERS\n[STREAM 1] DATA chunk #1\n[STREAM 3] DATA chunk #1\n[STREAM 1] DATA chunk #2\n...\n",[1380],{"type":754,"tag":770,"props":1381,"children":1382},{"__ignoreMap":925},[1383],{"type":759,"value":1378},{"type":754,"tag":755,"props":1385,"children":1386},{},[1387],{"type":759,"value":1388},"HTTP/3 — похожая идея потоков, но транспорт QUIC сам даёт streams/flow-control и безопасность, поэтому HTTP/3 описывает отображение HTTP поверх QUIC:",{"type":754,"tag":917,"props":1390,"children":1393},{"className":1391,"code":1392,"language":759},[920],"QUIC stream (request) -> HTTP request mapping\nQUIC stream (response)-> HTTP response mapping\nControl stream -> SETTINGS first\n",[1394],{"type":754,"tag":770,"props":1395,"children":1396},{"__ignoreMap":925},[1397],{"type":759,"value":1392},{"data":1399,"body":1400},{},{"type":751,"children":1401},[1402],{"type":754,"tag":755,"props":1403,"children":1404},{},[1405,1410,1412,1415],{"type":754,"tag":845,"props":1406,"children":1407},{},[1408],{"type":759,"value":1409},"Кратко",{"type":759,"value":1411},": HTTP/1.0, HTTP/1.1, HTTP/2 и HTTP/3 передают одни и те же базовые HTTP-смыслы (методы, статусы, заголовки, URI), но существенно отличаются тем, как кодируются и доставляются сообщения по сети, а также тем, как устроены соединения и параллелизм.",{"type":754,"tag":868,"props":1413,"children":1414},{},[],{"type":759,"value":1416},"\nКлючевая эволюция: от простого текстового формата и частых TCP-соединений (1.0) к устойчивым соединениям и более строгим правилам (1.1), затем к бинарному фреймингу и мультиплексированию в одном соединении (2), и далее — к переносу HTTP поверх QUIC/UDP с меньшими задержками установления и лучшей устойчивостью к блокировкам (3).",1775735659928]