March 9, 2019

співбес

HTTP 

HTTP — лежит в основе обмена данными в Интернете и позволяет получать различные ресурсы, например HTML-документы. HTTP является протоколом клиент-серверного взаимодействия, что означает инициирование запросов к серверу самим получателем, обычно веб-браузером. Сервер ожидает соединения для получения запроса, производит необходимые действия и возвращает обратно сообщение с результатом.

Между этими запросами и ответами существуют многочисленные посредники, называемые прокси, которые выполняют различные операции

  • caching (кеш может быть публичным или приватными, как кеш браузера)
  • фильтрация (как сканирование антивируса, родительский контроль, …)
  • выравнивание нагрузки (позволить нескольким серверам обслуживать разные запросы)
  • аутотентификация (контролировать доступом к разным ресурсам)
  • протоколирование (разрешение на хранение истории операций)

Основные аспекты HTTP

HTTP не имеет состояния, но имеет сессию

  • HTTP не имеет состояния: не существует связи между двумя запросами, которые последовательно выполняются по одному соединению. Но хотя ядро HTTP не имеет состояния, куки позволяют использовать сессии с сохранением состояния. Используя расширяемость заголовков, куки добавляются к рабочему потоку, позволяя сессии на каждом HTTP-запросе делиться некоторым контекстом, или состоянием.

HTTP - расширяемый

  • HTTP заголовки сопровождают обмен данными по протоколу HTTP. Они могут содержать описание данных и информацию необходимую для взаимодействия между клиентом и сервером.

Домен - это часть компьютерной сети, в которой один объект контролирует ресурсы обработки данных, например веб-сайт.

Протокол - это система правил, определяющая, как данные обмениваются внутри или между компьютерами. Для связи между устройствами требуется согласование формата данных, которые будут использоваться для обмена. Набор правил, определяющих формат, называется протоколом.

Интернет протокол (IP) - протокол сетевого уровня сетевой модели OSI (Open Systems Interconnection) и относится к протоколам, которые организуют соединения на основе коммутации каналов. Это один из самых распространенных протоколов является низкоуровневым маршрутизирующим сетевым протоколом, разбивающим данные на небольшие пакеты и посылающим их через сеть по определенному адресу, что не гарантирует доставки всех этих пакетов по этому адресу.

FTP (File Transfer Protocol - протокол передачи файлов) - стандартный протокол, предназначенный для передачи файлов по TCP-сетям (например, Интернет). Использует 21й порт. FTP часто используется для загрузки сетевых страниц и других документов с частного устройства разработки на открытые сервера хостинга.

Чем отличаются HTTP и HTTPS?

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

HTTPS (HyperText Transfer Protocol Secure) - расширение протокола HTTP, поддерживающее шифрование. Данные, передаваемые по протоколу HTTPS, "упаковываются" в криптографический протокол SSL или TLS. В отличие от HTTP, для HTTPS по умолчанию используется TCP-порт 443.


Кеширование

Кеширование - этот метод, заключающийся в сохранении копии полученного ресурса, чтобы вернуть ее по запросу. Запрос на ресурс, уже имеющийся в веб-кеше, перехватывается, и вместо обращения к исходному серверу выполняется загрузка копии из кеша. Таким образом снижается нагрузка на сервер, которому не приходится самому обслуживать всех клиентов, и повышается производительность - кеш ближе к клиенту, и ресурс передается быстрее. Кеширование является основным источником повышения производительности веб-сайтов. Однако, кеш надо правильно сконфигурировать: ресурсы редко остаются неизменными, так что копию требуется хранить только до того момента, как ресурс изменился, но не дольше.

Свежесть сохраненной копии

Однажды попав в кеш, ресурс, теоретически, может храниться там вечно. Однако, поскольку объем хранилища конечен, записи периодически приходится оттуда удалять. Этот процесс называют вытеснением данных из кеша (cache eviction). Кроме того, на сервере ресурсы могут изменяться, поэтому кеш требуется обновлять. Поскольку HTTP является клиент-серверным протоколом, сервера не могут сами обращаться к кешам и клиентам при изменении ресурса; им необходимо договориться о сроке действия сохраненной копии. До его истечения ресурс считается свежим (fresh), после - устаревшим (stale). Алгоритмы вытеснения отдают предпочтение "свежим" ресурсам. Тем не менее, копия ресурса не удаляется из кеша сразу же по истечению ее срока действия. При получении запроса на соответствующий ресурс кеш предваряет его с заголовком If-None-Match на случай, если его копия все еще актуальна. Если это так, сервер возвращает заголовок 304 (Not Modified - Не изменен), а тело ресурса не посылает, экономя тем самым траффик.

Cookie

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

Cookie используются, главным образом, для:

⦁   Управления сеансом (логины, корзины для виртуальных покупок)

⦁   Персонализации (пользовательские предпочтения)

⦁   Мониторинга (отслеживания поведения пользователя)

Порт


Есть программы мгновенного обмена сообщениями, есть файлообменные сети, и зачастую один сервер в интернете предоставляет одновременно сервисы различного типа. Чтобы он мог легко отличать запросы к разным сервисам друг от друга, клиент указывает (автоматически, за вас это делает программа, которой вы пользуетесь) не только IP-адрес сервера, но и "тип протокола" и, в случае наиболее распространенных протоколов TCP и UDP, номер порта.

Порт - это всего лишь число, указываемое при запросе на соединение. Никаких физических портов не существует. Однако имеются так называемые стандартные порты, соглашения об использовании, которых все стараются придерживаться.

80 http

Просмотр Web-страниц. Вот сейчас, читая эту страницу, вы установили соединение по 80му порту. Наши браузеры настроены на автоматическое использование 80го порта (если специально не указать иное). Кстати, название протокола (http) вы видите наверху, в адресной строке.

443 https

Шифрованный протокол просмотра Web-страниц, используется, например, при платежах через интернет

HTTP сообщения


Запросы

HTTP запросы и ответы имеют близкую структуру. Они состоят из:

  1. Стартовой строки, описывающей запрос, или статус (успех или сбой). Это всегда одна строка.
  2. Произвольного набора HTTP заголовков, определяющих запрос или описывающих тело сообщения. Заголовки несут информацию о браузере клиента, запрошенной странице, сервере и многом другом.
  3. Пустой строки, указывающей, что вся мета информация отправлена.
  4. Произвольного тела, содержащего пересылаемые с запросом данные (например, содержимое HTML-формы ) или отправляемый в ответ документ. Наличие тела и его размер определяется стартовой строкой и заголовками HTTP.

Стартовую строку вместе с заголовками сообщения HTTP называют головой запроса, а его данные - телом.


Ответы 

Строка статуса (Status line)

Стартовая строка ответа HTTP, называемая строкой статуса, содержит следующую информацию:

  1. Версию протоколаобычно HTTP/1.1.
  2. Код состояния (status code), показывающая, был ли запрос успешным. Коды сгруппированы в 5 классов: информационные, успешные, перенаправления, ошибки клиента и ошибки сервера
  3. Пояснение (status text). Краткое текстовое описание кода состояния, помогающее пользователю понять сообщение HTTP.

Заголовки

Заголовки ответов HTTP имеют ту же структуру, что и все остальные заголовки: не зависящая от регистра строка, завершаемая двоеточием (':') и значение, структура которого определяется типом заголовка. Весь заголовок, включая значение, представляет собой одну строку.

Тело

Последней частью ответа является его тело. Оно есть не у всех ответов: у ответов с кодом состояния, например, 201 или 204, оно обычно отсутствует.


Методы HTTP запроса

Для каждого типа операции используется свой метод HTTP-запроса:

  1. получение - GET
  2. добавление - POST
  3. модификация - PUT
  4. удаление - DELETE

Т.е. :

  • GET-запрос /rest/users - получение информации о всех пользователях
  • GET-запрос /rest/users/125 - получение информации о пользователе с id=125
  • POST-запрос /rest/users - добавление нового пользователя
  • PUT-запрос /rest/users/125 - изменение информации о пользователе с id=125
  • DELETE-запрос /rest/users/125 - удаление пользователя с id=125

Чем отличаются методы get и post?

GET передает данные серверу используя URL, а POST передает данные, используя тело HTTP запроса.

Длина URL’а ограничена 1024 символами, что и будет верхним пределом для данных, которые можно отослать GET’ом. POST может отправлять гораздо большие объемы данных. Кроме того, передача данных методом POST более безопасна, чем методом GET, так как секретные данные (например пароль) не отображаются напрямую в web-клиенте пользователя (в отличии от URL, который виден почти всегда).

Принципы ООП

Инкапсуляция - спосіб згрупувати дані і код який ними маніпулює, захистити від внешнего вмешательства или неправильного использования.

Создаётся объект (object). Другими словами, объект - это то, что поддерживает инкапсуляцию.

Внутри объекта коды и данные могут быть закрытыми (private). Закрытые коды или данные доступны только для других частей этого объекта. Таким образом, закрытые коды и данные недоступны для тех частей программы, которые существуют вне объекта. Если коды и данные являются открытыми, то, несмотря на то, что они заданы внутри объекта, они доступны и для других частей программы. Характерной является ситуация, когда открытая часть объекта используется для того, чтобы обеспечить контролируемый интерфейс закрытых элементов объекта.

Наследование - это процесс, посредством которого один объект может приобретать свойства другого. Точнее, объект может наследовать основные свойства другого объекта и добавлять к ним черты, характерные только для него. Наследование является важным, поскольку оно позволяет поддерживать концепцию иерархии классов (hierarchical classification). Применение иерархии классов делает управляемыми большие потоки информации. 

 Полиморфизм - возможность различных классов объявить один и тот же метод или свойство. Таким образом, полиморфизм отвечает за то, чей метод вызвать. Различные классы могут определять методы с одинаковыми именами

...

что такое свойство объекта, а что метод

набор вспомогательных функций и значений, доступных «через точку»

написать функцию, add, чтобы вызов add(1)(2) вернул 3
function add(a) {
  return function(b) {
    return a+b;
  };
}

ООП - методология программирования, основанная на группировать функции и данные в единой сущности – «объекте», каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования

Прототип объекта Объекты в JavaScript можно организовать в цепочки так, чтобы свойство, не найденное в одном объекте, автоматически искалось бы в другом.

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

Всё взаимодействие с сервером сводится к 4 операциям...

rest api - это соглашение/технология/протокол/договорённость о том, как получать и посылать данные на сервер

  • Наследование - построено на прототипах - Пример
  • Инкапсуляция - это когда мы можем скрыть свойства или методы от доступа извне, сделав их локальными. - Пример
  • Полиморфизм - это когда подкласс класса может вызвать ту же самую обобщенную унаследованную функцию в своем собственном контексте. - Пример

Значение this называется контекстом вызова и будет определено в момент вызова функции.


Что такое DOM?

DOM – это представление документа в виде дерева объектов, доступное для изменения через JavaScript.

Являється основным инструментом работы и динамических изменений на странице.

Согласно DOM-модели, документ является иерархией, деревом. Каждый HTML-тег образует узел дерева с типом «элемент». Вложенные в него теги становятся дочерними узлами. Для представления текста создаются узлы с типом «текст».

Что такое цикл событий?

https://www.youtube.com/watch?v=8cV4ZvHXQL4

Цикл событий перебрасывает содержимое из очереди задач в стек выполнения. Стек это место где хранятся все функции программы до выполнения. Оттуда они берутся и выполняются по очереди. Однако, кроме стека выполнения существует такая вещь как WebAPI или c++ компилятор в nodejs. Это дополнительная среда выполнения не зависящая от стека. Там функции api выполняются и результат отправляется в очередь задач. Когда стек очищается, из очереди задач берутся функции, отправляются в цикл событий и оттуда по одной в пустой стек на выполнение.

callback-функция

Коллбэк – это функция, которая передается куда-либо как аргумент, и ожидается, что она будет вызвана при наступлении события.

Что такое замыкание?

Замыкание — это функция, у которой есть доступ к области видимости, сформированной внешней по отношению к ней функции даже после того, как эта внешняя функция завершила работу. Это значит, что в замыкании могут храниться переменные, объявленные во внешней функции и переданные ей аргументы.

Обратите внимание на то, что когда функция завершит работу, её контекст выполнения извлекается из стека вызовов, но её лексическое окружение может быть удалено из памяти, а может и остаться там. Это зависит от того, существуют ли в других лексических окружениях ссылки на данное лексическое окружение в виде ссылок на внешнее лексическое окружение.

Контекст выполнения — это абстрактное окружение, в котором вычисляется и выполняется JavaScript-код. Когда выполняется глобальный код, это происходит внутри глобального контекста выполнения. Код функции выполняется внутри контекста выполнения функции.

Стек вызовов — это структура данных, устроенная по принципу LIFO (Last In, First Out — последним вошёл, первым вышел). Новые элементы можно помещать только в верхнюю часть стека, и только из неё же элементы можно изымать.

Значение переменной из внешней области берётся всегда текущее. Оно может быть уже не то, что было на момент создания функции.

прототипное наследование 

Объекты в JavaScript можно организовать в цепочки так, чтобы свойство, не найденное в одном объекте, автоматически искалось бы в другом.

Связующим звеном выступает специальное свойство __proto__.

Как работает ключевое слово this?

Значением this является объект перед «точкой», в контексте которого вызван метод.

Любая функция может иметь в себе this. Совершенно неважно, объявлена ли она в объекте или отдельно от него.

Значение this называется контекстом вызова и будет определено в момент вызова функции.

Что такое всплытие событий и как работает этот механизм?

При наступлении события обработчики сначала срабатывают на самом вложенном элементе, затем на его родителе, затем выше и так далее, вверх по цепочке вложенности.

Самый глубокий элемент, который вызывает событие, называется «целевым» или «исходным»элементом и доступен как event.target.

Observable

Observable - это название механизма, который используется в Angular для программирования асинхронных потоков данных в декларативном стиле. Observable является синонимом термина stream. К асинхронным потокам данных обычно относятся такие концепции, как события, http запросы и триггеры в коде.

Данный механизм позволяет создавать объекты, инициирующие асинхронные потоки (stream или observable) и объекты, которые за ними наблюдают (observer).

Над observable можно производить различные операции, например, их можно создавать, комбинировать и фильтровать. Более того практически все что угодно может быть потоком. Потоковое программирование это очень гибкая концепция, позволяющая реализовывать необходимую логику минимальным количеством кода.

Для расширенной реализации observable в Angular используется сторонняя библиотека Reactive Extensions (RxJS).

Как было отмечено выше, работа с потоками стоится на двух объектах - observable и observer. Эти методы представляет один и тот же объект, что делает удобным реализацию данного механизма в виде сервиса.

Observableимеет 3 состояния: 

  1. обработка данных
  2. успешное завершение обработки
  3. ошибка обработки