recursal/MDN huggingface dataset:
MIME-тип
========

**MIME-тип** (называемый "media type", а иногда "content type") - это строка, отправляемая вместе с файлом, которая указывает тип файла. (например, передаваемый аудиофайл может быть помечен как `audio/ogg` тип, а изображение - `image/png`). MIME-тип играет точно такую же роль, как и расширение файла в системе Windows. Когда HTTP-сообщение содержит `Content-type` заголовок, тело запроса будет парситься в соответствии с MIME-типом, указанным в заголовке.

Узнать больше
-------------

### Основная информация

* Список MIME-типов
### Технические справки

* List of MIME types
* Properly Configuring Server MIME Types (en-US)
* Детальная информация об использовании MIME Types в контексте Веб.
DNS
===

**DNS** (*Система доменных имён*, англ. **Domain Name System**) — это иерархическая децентрализованная система именования для интернет-ресурсов подключённых к Интернет, которая ведёт список доменных имён вместе с их числовыми IP-адресами или местонахождениями. DNS позволяет перевести простое запоминаемое имя хоста в IP-адрес. **DNS lookup** (Поиск DNS) — это процесс с помощью которого от DNS-сервер возвращается DNS запись, необходимая для нахождения конкретного компьютерного сервиса в Интернет или частной сети.

Взаимосвязанные компьютеры, сервера и смартфоны должны знать как преобразовать email адреса и доменные имена, которые используют люди, в значимые числовые адреса. Эту функцию выполняет DNS lookup.

**Reverse DNS lookup** (rDNS, *обратный просмотр DNS*) — это метод запроса к DNS для определения доменного имени по его IP-адресу.

Узнать больше
-------------

### Общие знания

* Что такое доменные адреса
Cookie
======

Cookie - это небольшой фрагмент информации, сохранённый на компьютере посетителя веб-сайтом через веб-браузер.

Файлы Cookie используются для персонализации работы пользователя с веб-сайтом . Они могут содержать предпочтения или введённые данные пользователя при работе с этим веб сайтом . Пользователь может настроить свой веб-браузер таким образом, чтобы он принимал, отклонял или удалял куки.

Файлы Cookie могут быть установлены и изменены на уровне сервера с помощью заголовка Set-Cookie HTTP или с помощью JavaScript, используя `document.cookie`.

Узнать больше
-------------

### Общие знания

* HTTP cookie в Википедии
CSS
===

**CSS** (Cascading Style Sheets, или каскадные таблицы стилей) - это декларативный язык, который отвечает за то, как страницы выглядят в веб браузере. CSS стили содержат свойства и их значения, которые и определяют, как будет выглядеть сайт.

CSS одна из ключевых Web технологий, наряду с HTML и JavaScript. Как правило CSS используется для определения стилей HTML-элементов, но также может быть применён совместно с другими языками разметки, такими как SVG или XML.

CSS-правило состоит из селектора и набора свойств (en-US) с их значениями. В этом примере все HTML параграфы будут иметь текст жёлтого цвета на чёрном фоне:


```css
/\* Селектор "p" означает, что данное правило будет применено ко всем параграфам в документе \*/
p {
  /\* Свойство "color" определяет цвет текста, в данном случае желтый. \*/
  color: yellow;

  /\* Свойство "background-color" определяет цвет фона элемента, в данном случае черный. \*/
  background-color: black;
}
```


"Каскадность" CSS - это правила, которые регулируют приоритет селекторов при отображении внешнего вида элементов страницы. Это очень важная особенность, поскольку сложный веб-сайт может иметь тысячи CSS-селекторов.

Смотрите также
--------------

### Базовые знания

* Изучение CSS
### Техническая документация

* CSS документация на MDN
* Рабочая группа CSS по текущей работе
### Веб-курсы CSS

* Веб курсы на codecademy.com
* Веб курсы на W3Schools
Идемпотентный метод
===================

Метод HTTP является идемпотентным, если повторный идентичный запрос, сделанный один или несколько раз подряд, имеет один и тот же эффект, не изменяющий состояние сервера. Другими словами, идемпотентный метод не должен иметь никаких побочных эффектов (side-effects), кроме сбора статистики или подобных операций. Корректно реализованные методы `GET`, `HEAD`, `PUT` и `DELETE` **идемпотентны**, но не метод `POST`. Также все безопасные методы являются идемпотентными.

Для идемпотентности нужно рассматривать только изменение фактического внутреннего состояния сервера, а возвращаемые запросами коды статуса могут отличаться: первый вызов `DELETE` вернёт код `200`, в то время как последующие вызовы вернут код `404`. Из идемпотентности `DELETE` неявно следует, что разработчики не должны использовать метод `DELETE` при реализации RESTful API с функциональностью ***удалить последнюю запись***.

Обратите внимание, что идемпотентность метода не гарантируется сервером, и некоторые приложения могут нарушать ограничение идемпотентности.

`GET /pageX HTTP/1.1` идемпотентен. Вызвавший несколько раз подряд этот запрос, клиент получит тот же результат:
```

GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
```


`POST /add_row HTTP/1.1` не идемпотентен; если его вызвать несколько раз, то он добавит несколько строк:
```

POST /add_row HTTP/1.1
POST /add_row HTTP/1.1   -> Adds a 2nd row
POST /add_row HTTP/1.1   -> Adds a 3rd row
```


`DELETE /idX/delete HTTP/1.1` идемпотентен, даже если возвращаемый код отличается:
```

DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists
DELETE /idX/delete HTTP/1.1   -> Returns 404 as it just got deleted
DELETE /idX/delete HTTP/1.1   -> Returns 404
```

Материалы для изучения
----------------------

### Общие

* Определение идемпотентности в спецификации HTTP.
### Технические

* Описание общих идемпотентных методов: `GET`, `HEAD`, `PUT`, `DELETE`, `OPTIONS`
* Описание общих неидемпотентных методов: `POST`
Метод
=====

**Метод** это функция, являющаяся свойством объекта. Существует два типа методов: *Методы Экземпляра* которые являются встроенными задачами, выполняемыми экземпляром объекта, или *Статические Методы (en-US)* которые являются задачами, вызываемыми непосредственно в конструкторе объекта.

**Примечание:** В JavaScript функции сами по себе являются объектами, поэтому в этом контексте метод фактически является ссылкой на объект (en-US) для функции.

Узнать больше
-------------

### Узнайте об этом

* Определение методов в JavaScript (сравнение традиционного синтаксиса и нового короткого)
### Техническая информация

* Список встроенных методов JavaScript

* Глоссарий MDN
    + Функция
    + Объект
    + Свойство
    + Статический метод (en-US)
* Определение методов в JavaScript
Синхронный
==========

*Синхронный* относится к среде связи где каждый участник получает (и если нужно обрабатывает и/или отвечает) сообщения немедленно (или настолько быстро, на сколько это возможно).

Примером из жизни является телефон — во время телефонного разговора вы можете отвечать собеседнику незамедлительно.

Множество команд так же синхронны — например когда вы вводите значения в поле при каком-либо вычислении, результат может быть мгновенно рассчитан и выведен в поле с результатом.

Больше информации
-----------------

### Техническая документация

* Asynchronous
* Синхронные и асинхронные запросы с использованием XMLHttpRequest() API
CORS
====

**CORS** (Cross-Origin Resource Sharing, рус. "Совместное использование ресурсов между разными источниками") - это система, состоящая из отправки HTTP заголовков, которые определяют: заблокировать или выполнить запрос к ограниченному ресурсу на веб-странице из другого домена, отличного от домена происхождения запрашиваемого ресурса.

The same-origin security policy (рус. "правило ограничения домена") по умолчанию запрещает междоменные запросы. CORS предоставляет веб-серверам возможность контролировать междоменные запросы и позволяет производить безопасный обмен данными между разными доменами.

Узнать больше
-------------

### Основная база знаний

* HTTP access control (CORS) (en-US) на MDN
### CORS заголовки

`Access-Control-Allow-Origin`

Указывает, разрешён ли такой запрос для ресурсов из данного источника.

`Access-Control-Allow-Credentials` (en-US)

Указывает, разрешён ли ответ на запрос в случае, если credentials flag выставлен в `true`.

`Access-Control-Allow-Headers`

Используется в ответе на запрос в случае "предполётной проверки"(preflight request (en-US)) - проверки, какие из HTTP заголовков могут быть использованы для запроса.

`Access-Control-Allow-Methods`

Указывает метод или методы, которые разрешены для доступа к ресурсу в ответ на "предполётный запрос"(preflight request (en-US)).

`Access-Control-Expose-Headers` (en-US)

Указывает, какие заголовки могут быть предоставлены как часть ответа, перечисляя их имена.

`Access-Control-Max-Age`

Указывает, как долго могут быть закешированы результаты "предполётного запроса"(preflight request (en-US)).

`Access-Control-Request-Headers` (en-US)

Используется для исполнения "предполётного запроса"(preflight request (en-US)), чтобы указать серверу, какие из HTTP заголовков будут использоваться во время реального запроса.

`Access-Control-Request-Method` (en-US)

Используется для исполнения "предполётного запроса"(preflight request (en-US)), чтобы указать серверу, какие HTTP методы будут использоваться во время реального запроса.

`Origin`

Указывает, откуда производится запрос.

### Техническая документация

* Fetch specification
SDP
===

**SDP** (Session Description Protocol - протокол описания сессии) - это текстовый формат для описания peer-to-peer (en-US)-соединения. SDP содержит описание кодеков, адрес источника и информацию для синхронизации аудио и видео.

Here is a typical SDP message:
```

   v=0
   o=alice 2890844526 2890844526 IN IP4 host.anywhere.com
   s=
   c=IN IP4 host.anywhere.com
   t=0 0
   m=audio 49170 RTP/AVP 0
   a=rtpmap:0 PCMU/8000
   m=video 51372 RTP/AVP 31
   a=rtpmap:31 H261/90000
   m=video 53000 RTP/AVP 32
   a=rtpmap:32 MPV/90000
```


SDP is never used alone, but by protocols like RTP (en-US) and RTSP (en-US). SDP is also as component of WebRTC, which uses SDP as a way of describing a session.

Learn more
----------

### General knowledge

* WebRTC protocols (en-US)
CDN
===

CDN (Content Delivery Network - сеть доставки контента) - это группа серверов, расположенных во многих местах. Эти сервера хранят дубликаты данных, чтобы сервера могли выполнять запросы данных на основе того, какие сервера ближе всего к конечным пользователям. CDN увеличивают скорость доступа к сервису уменьшая влияние высокого трафика.

CDN широко используются для доставки таблиц стилей и файлов Javascript (статических ресурсов) библиотек, таких как Bootstrap, jQuery и т. д. Использование CDN для статических библиотечных файлов предпочтительно по ряду причин:

* Обслуживание статических ресурсов библиотек через CDN снижает нагрузку на запросы на наших собственных серверах.
* Большинство CDN имеют сервера по всему миру, поэтому сервера CDN могут быть географически ближе к вашим пользователям, чем ваши собственные сервера. Географическое расстояние пропорционально влияет на задержку.
* CDN уже настроены с правильной конфигурацией кеша. Использование CDN сохраняет дальнейшую конфигурацию статических ресурсов на собственных серверах.
Простой заголовок
=================

*Простой заголовок (или заголовок запроса с поддержкой безопасности CORS*) - это один из следующих HTTP заголовков:

* `Accept`,
* `Accept-Language`,
* `Content-Language`,
* `Content-Type` с MIME-типом, найденным в этом значении (исключая параметры), либо `application/x-www-form-urlencoded`, `multipart/form-data` или `text/plain`.

Или один из этих клиентских заголовков:

* `DPR` (en-US)
* `Downlink` (en-US)
* `Save-Data` (en-US)
* `Viewport-Width` (en-US)
* `Width` (en-US)

Если они содержат только простые заголовки, запросы считаются простыми и не нужно отправлять preflight request (en-US) в контексте CORS.

Смотрите также
--------------

* HTTP заголовки
* Simple response header (en-US)
* Forbidden header name
* Request header
HTTP
====

Протокол передачи гипертекста (HTTP) является базовым сетевым протоколом, который позволяет передавать гипермедиа документы в Web, обычно между браузером и сервером, таким образом, что бы люди могли их читать. Текущая версия спецификации HTTP называется HTTP/2.

Как часть URI, `http://` называется `scheme` (схема) и обычно стоит в начале адреса, например, в `https://developer.mozilla.org`, чтобы указать браузеру запросить документ с использованием протокола HTTP. HTTPS в этом случае относится к защищённой версии протокола HTTP, SSL (en-US) (также называемый TLS).

HTTP является текстовым (все сообщения осуществляются в виде простого текста), без запоминания состояния (нет информации о предыдущих сообщениях). Это свойство делает его идеальным для чтения людьми документов (веб-сайтов) во всемирной паутине. Однако HTTP также можно использовать в качестве основы веб-сервисов REST для передачи сообщений от сервера к серверу или запросов AJAX на веб-сайтах, чтобы сделать их более динамичными.

Изучите больше
--------------

* HTTP на сайте MDN
Кешируемые методы
=================

**Кешируемые** ответы - это HTTP-ответы, которые могут быть закешированы, то есть сохранены для дальнейшего восстановления и использования позже, тем самым снижая число запросов к серверу. Не все HTTP-ответы могут быть закешированы. Вот несколько ограничений:

* Метод, используемый в запросе, кешируемый, если это `GET` или `HEAD`. Ответ для `POST` или `PATCH` запросов может также быть закеширован, если указан признак "свежести" данных и установлен заголовок `Content-Location` (en-US), но это редко реализуется. (Например, Firefox не поддерживает это согласно https://bugzilla.mozilla.org/show\_bug.cgi?id=109553.) Другие методы, такие как `PUT` и `DELETE` не кешируемые, и результат их выполнения не кешируется.
* Коды ответа, известные системе кеширования, которые рассматриваются как кешируемые: `200`, `203`, `204`, `206`, `300`, `301`, `404`, `405`, `410`, `414`, `501`.
* Отсутствуют специальные заголовки в ответе, которые предотвращают кеширование: например, `Cache-Control`.

Обратите внимание, что некоторые некешируемые запросы-ответы к определённым URI могут сделать недействительным (инвалидируют) предыдущие закешированные ответы на тех же URI. Например, `PUT` к странице pageX.html инвалидируют все закешированные ответы `GET` или `HEAD` запросов к этой странице.

Когда и метод запроса и статус ответа кешированы, то ответ к запросу тоже может быть закеширован:
```

GET /pageX.html HTTP/1.1
(…)

200 OK
(…)
```


Запрос `PUT` не может быть закеширован. Более того, он инвалидирует закешированные данные запросов к тому же URI, сделанных через `HEAD` или `GET`:
```

PUT /pageX.html HTTP/1.1
(…)

200 OK
(…)
```


Специальный заголовок `Cache-Control` в ответе может предотвратить кеширование:
```

GET /pageX.html HTTP/1.1
(…)

200 OK
Cache-Control: no-cache
(…)
```

Материалы для изучения
----------------------

### Основные

* Определение кешируемых методов в спецификации HTTP.
### Технические

* Описание общих кешируемых методов: `GET`, `HEAD`
* Описание общих некешируемых методов: `PUT`, `DELETE`, often `POST`
World Wide Web
==============

Всемирная сеть — сокращённо: **WWW**, **W3**, или **Web; Сеть**, **паутина** или **веб** — всемирная система публичных веб-страниц в сети Интернет. Сеть не является Интернетом: Сеть лишь использует Интернет как среду передачи информации и данных.

Тим Бернерз-Ли предложил архитектуру, которая стала известна под названием World Wide Web. В 1990 году в ЦЕРН (в своей лаборатории физ. исследований) он создал первый веб-сервер (en-US), браузер и веб-страницу на своём компьютере. В 1991 году он объявил про своё творение в группе новостей alt.hypertext, тем самым, обозначив момент, когда Web стал достоянием общества.

Система, которую мы называем Web состоит из нескольких компонентов:

* Протокол **HTTP** обеспечивает обмен данными между сервером и клиентом.
* Отсылая запрос серверу на определённый ресурс, клиент предоставляет неповторимый идентификатор, который зовётся **URL** (унифицированное расположение ресурсов) или URI (en-US) (унифицированный идентификатор ресурса).
* **HTML** (язык гипертекстовой разметки) - самый распространённый формат веб-документов.

Связь страниц с помощью гиперссылок (en-US) является главной концепцией Web.

Незадолго после создания Web, Тим Бернерз-Ли основал W3C (World Wide Web Consortium) для стандартизации и последующего развития интернета. Этот консорциум состоит из: разработчиков браузеров, гос. учреждения, исследователи и университеты. Его цель - образование и распространение.

Узнать больше
-------------

### Обучение

* Изучение веб-разработки
* Web literacy map (знания и умения, необходимые для веб-разработки)
### Общие ведомости

* Сайт международного сообщества W3C
Copyleft
========

Copyleft — это термин, обычно относящийся к лицензии, который используется для обозначения того, что такая лицензия требует, что бы распространение данного продукта подчинялось той же лицензии, что и оригинал. Примерами лицензий с copyleft являются лицензии GNU GPL (en-US) (для программного обеспечения) и лицензии Creative Commons SA (Share Alike) (для рисунков, фотографий и т.д.).
Обёртка
=======

В языках программирования, таких как JavaScript , обёртка является функцией, которая предназначена для вызова одного или более других функций , иногда исключительно для удобства , а иногда адаптируя их чтобы сделать немного отличающийся задачу в процессе.
Атрибут
=======

*Атрибут* является частью тега, позволяющей менять его поведение или добавлять метаданные. Атрибут всегда представлен в виде `название=значение`, которые определяют соответственно идентификатор атрибута и присвоенное ему значение.

Узнать подробнее
----------------

### Техническая информация

* Справочник атрибутов HTML
* Информация о глобальных атрибутах HTML
Строка
======

В любом языке программирования компьютера, строка представляет собой последовательность символов, используемых для представления текста.

В JavaScript, String - это один из примитивных типов и `String` объект - это wrapper над примитивной строкой.

Смотрите также
--------------

### Общие сведения

* JavaScript data types and data structures
Pixel
=====

Пиксель (англ. Pixel) - маленький строительный блок графического дисплея экрана компьютера.

Разрешение дисплея выражено в пикселях, например: "800 x 600" пикселей, значит, что дисплей может отображать 800 пикселей в ширину и 600 пикселей в высоту.

Узнайте больше
--------------

### Технические ссылки

* Pixel в Wikipedia
IP-адрес
========

IP-адрес — это номер, присваиваемый каждому устройству, подключенному к сети, которая использует протокол Интернет.

Термин "IP-адрес" обычно означает 32-разрядные IPv4 адреса, но до тех пор, пока IPv6 не получит более широкое применение.

Смотрите также
--------------

* IP-адрес в Википедии
Запрещённое имя заголовка
=========================

**Запрещённое имя заголовка** (Forbidden header name) – это имя какого-либо HTTP заголовка, который нельзя изменить программно.

Изменение этих заголовков запрещено, потому что пользовательский агент (браузер) удерживает полный контроль над ними. Заголовки, чьи имена начинаются с `Sec-`, зарезервированы для создания новых заголовков, безопасных (отделённых) от APIs, используемого Fetch, которое даёт разработчику контроль над заголовками. Утверждение также верно и для `XMLHttpRequest`.

Запрещённые имена заголовков начинаются с `Proxy-` или `Sec-`, или содержат следующие имена:

* `Accept-Charset`
* `Accept-Encoding`
* `Access-Control-Request-Headers`
* `Access-Control-Request-Method`
* `Connection`
* `Content-Length`
* `Cookie`
* `Cookie2`
* `Date`
* `DNT`
* `Expect`
* `Host`
* `Keep-Alive`
* `Origin`
* `Proxy-`
* `Sec-`
* `Referer`
* `TE`
* `Trailer`
* `Transfer-Encoding`
* `Upgrade`
* `Via`

**Примечание:** Заголовок `User-Agent` более не запрещён, как указано в спецификации — посмотрите список запрещённых заголовков (он был реализован в Firefox 43,) так что `User-Agent` может быть установлен через в объект Headers (en-US) под Fetch через вызов метода setRequestHeader().
Time to first byte
==================

**Время до первого байта** (англ. Time to First Byte, TTFB) - одна из метрик производительности веб-страниц, которая описывает время, которое прошло с момента отправления браузером запроса страницы до момента, когда он получил первый байт информации с сервера. Это время включает в себя поиск DNS-сервера и установление соединения с использованием TCP-рукопожатия и SSL (en-US)-рукопожатия, если запрос выполняется через https.

TTFB - время между началом запроса и началом ответа в миллисекундах:
```

TTFB = responseStart - requestStart
```

Смотрите также
--------------

* A typical HTTP session
* PerformanceResourceTiming (en-US)
* PerformanceTiming (en-US)
OpenGL
======

**OpenGL** (**Open Graphics Library**) - Это кроссплатформеный программный интерфейс, использующийся разными языками для обработки векторной (2D, 3D) графики.Обычно используется для взаимодействия с графическим процессором (GPU), чтобы добиться аппаратно-ускоренного рендеринга.
Кеш
===

**Кеш** (веб кеш или HTTP кеш) это компонент, который временно сохраняет HTTP ответы от сервера для того, чтобы их затем можно было использовать в последующих HTTP запросах, до тех пор пока он удовлетворяет некоторым условиям.
Истинноподобное значение
========================

В JavaScript **истинноподобное (truthy)** значение — это значение, рассматривающиеся как `true` в булевом контексте. К истинноподобным значениям относятся все значения кроме ложноподобных значений. То есть все значения **истинноподобны** кроме `false`, `0`, `-0`, `0n`, `""`, `null`, `undefined` и `NaN`.

В булевых контекстах JavaScript использует механизм приведения типов.

Примеры *истинноподобных* значений в JavaScript (которые будут принудительно приведены к `true` в булевых контекстах, выполняя таким образом содержимое блока `if`):


```js
if (true)
if ({})
if ([])
if (42)
if ("0")
if ("false")
if (new Date())
if (-42)
if (12n)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
```

### Оператор логического И, &&

Если первый операнд истинноподобен, то оператор логического И вернёт второй операнд:


```js
true && "dog"
// возвращает "dog"

[] && "dog"
// возвращает "dog"
```

Смотрите также
--------------

* Falsy
* Приведение типов
* Boolean
First contentful paint
======================

**Первое существенное отображение** (англ. First Contentful Paint, FCP) - время, за которое пользователь увидит какое-то содержимое веб-страницы, например, текст или картинку.

Эта метрика показывает, какое время потребуется браузеру для отображения части DOM после того, как пользователь перешёл на веб-страницу. Контентом в данном случае считаются любой текст, изображения, не пустой canvas и SVG. Данный показатель не учитывает загрузку контента в iframe, но учитывает текст, шрифт которых ещё загружается.

Смотрите также
--------------

* First Meaningful Paint
* Paint Timing specification
Статическая типизация
=====================

**Статически типизированный** язык — это язык, где типы переменных известны во время компиляции (н-р Java, C, C++). В большинстве таких языков типы переменных должны быть явно заданы разработчиком. В остальных статически типизированных языках вывод типов (type inference) позволяет не задавать их (н-р OCaml).