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