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