Руководство для начинающих по серверной веб-разработке с Node.js
Большую часть своей веб-карьеры я работал исключительно на стороне клиента. Проектирование адаптивных макетов, создание визуализаций из больших объемов данных, создание инструментальных панелей приложений и т. Д. Но мне никогда не приходилось иметь дело с маршрутизацией или HTTP-запросами напрямую. До не давнего времени.
Этот пост представляет собой описание того, как я узнал больше о веб-разработке на стороне сервера с помощью Node.js, и краткое сравнение написания простого HTTP-сервера с использованием 3 разных сред, Express, Koa.js и Hapi.js.
Примечание: если вы опытный разработчик Node.js, вы, вероятно, подумаете о том, что это все элементарно/просто. ¯\_(ツ)_/¯.
Некоторые основы сети
Когда я начал работать в веб-индустрии пару лет назад, я наткнулся на курс по компьютерным сетям профессора Дэвида Ветерала на Coursera. К сожалению, он больше не доступен, но лекции по-прежнему доступны на веб-сайте Pearson.
Мне очень понравился этот курс, потому что он объяснял, что происходило под капотом, в понятной форме, поэтому, если вы можете взять в руки учебник «Компьютерные сети», прочитайте все подробности о чудесах сети.
Здесь, однако, я собираюсь лишь кратко рассказать о контексте. HTTP (Hypertext Transfer Protocol) — это протокол связи, используемый в компьютерных сетях. В Интернете их много, таких как SMTP (простой протокол передачи почты), FTP (протокол передачи файлов), POP3 (протокол почтового отделения 3) и так далее.
Эти протоколы позволяют устройствам с совершенно разным аппаратным / программным обеспечением связываться друг с другом, поскольку они предоставляют четко определенные форматы сообщений, правила, синтаксис и семантику и т.д. Это означает, что, пока устройство поддерживает определенный протокол, оно может связываться с любым другим устройством. в сети.
От TCP / IP против OSI: в чем разница между двумя моделями?
Операционные системы обычно поставляются с поддержкой сетевых протоколов, таких как HTTP, из коробки, что объясняет, почему нам не нужно явно устанавливать какое-либо дополнительное программное обеспечение для доступа в Интернет. Большинство сетевых протоколов поддерживают открытое соединение между двумя устройствами, что позволяет им передавать данные туда и обратно.
HTTP, на котором работает сеть, отличается. Он известен как протокол без установления соединения, потому что он основан на режиме работы запрос / ответ. Веб-браузеры отправляют на сервер запросы на изображения, шрифты, контент и т.д., но после выполнения запроса соединение между браузером и сервером разрывается.
Servers and Clients
Термин сервер может слегка сбивать с толку людей, впервые знакомых с отраслью, поскольку он может относиться как к аппаратному обеспечению (физические компьютеры, на которых размещены все файлы и программное обеспечение, требуемое веб-сайтами), так и к программному обеспечению (программе, которая позволяет пользователям получать доступ к этим файлам в Интернете).
Сегодня мы поговорим о программной стороне вещей. Но сначала несколько определений. URL обозначает Universal Resource Locator и состоит из 3 частей: протокола, сервера и запрашиваемого файла.
Структура URL адреса
Протокол HTTP определяет несколько методов, которые браузер может использовать, чтобы попросить сервер выполнить кучу различных действий, наиболее распространенными из которых являются GET и POST. Когда пользователь щелкает ссылку или вводит URL-адрес в адресную строку, браузер отправляет GET-запрос на сервер для получения ресурса, определенного в URL-адресе.
Сервер должен знать, как обрабатывать этот HTTP-запрос, чтобы получить правильный файл, а затем отправить его обратно браузеру, который его запросил. Наиболее популярное программное обеспечение веб-сервера, которое обрабатывает это Apache и NGINX.
Веб-серверы обрабатывают входящие запросы и отвечают на них соответственно
Оба представляют собой полнофункциональные пакеты программного обеспечения с открытым исходным кодом, которые включают в себя такие функции, как схемы аутентификации, перезапись URL-адресов, ведение журнала и проксирование, и это лишь некоторые из них. Apache и NGINX написаны на C. Технически, вы можете написать веб-сервер на любом языке. Python, golang.org/pkg/net/http, Ruby, этот список может продолжаться довольно долго. Просто некоторые языки лучше выполняют определенные вещи, чем другие.
Создание HTTP сервера с Node.js
Node.js — это среда выполнения Javascript, построенная на движке Chrome V8 Javascript. Он поставляется с модулем http, который предоставляет набор функций и классов для построения HTTP-сервера.
Для этого базового HTTP-сервера мы также будем использовать файловую систему, путь и URL-адрес, которые являются собственными модулями Node.js.
Начните с импорта необходимых модулей.
Мы также создадим словарь типов MIME, чтобы мы могли назначить соответствующий тип MIME запрашиваемому ресурсу на основе его расширения. Полный список типов MIME можно найти в Internet Assigned Numbers Authority (интернет-центре назначенных номеров).
Теперь мы можем создать HTTP-сервер с функцией http.createServer() , которая будет возвращать новый экземпляр http.Server .
Мы передадим функцию-обработчик запроса в createServer() с объектами запроса и ответа. Эта функция вызывается один раз каждый раз, когда к серверу поступает HTTP-запрос.
Сервер запускается путем вызова метода listen объекта server с номером порта, который мы хотим, чтобы сервер прослушивал, например, 5000 .
Объект request является экземпляром IncomingMessage и позволяет нам получать доступ ко всей информации о запросе, такой как статус ответа, заголовки и данные.
Объект response является экземпляром ServerResponse, который является записываемым потоком и предоставляет множество методов для отправки данных обратно клиенту.
В обработчике запросов мы хотим сделать следующее:
- Разобрать входящий запрос и обработать его без расширений
Выполните некоторые элементарные проверки, чтобы определить, существует ли запрошенный ресурс, и ответить соответственно
Весь код размещен на Glitch, и вы можете сделать ремикс на проект, если хотите.
Создание HTTP-сервера с фреймворками Node.js
Фреймворки Node.js, такие как Express, Koa.js и Hapi.js, поставляются с различными полезными функциями промежуточного программного обеспечения, в дополнение к множеству других удобных функций, которые избавляют разработчиков от необходимости писать самим.
Лично я чувствую, что лучше сначала изучать основы без фреймворков, просто для понимания того, что происходит под капотом, а затем после этого сходить с ума с любым фреймворком, который вам нравится.
В Express имеется собственный встроенный плагин для обслуживания статических файлов, поэтому код, необходимый для выполнения тех же действий, что и в собственном Node.js, значительно короче.
Koa.js не имеет подобного плагина внутри своего ядра, поэтому любой требуемый плагин должен быть установлен отдельно. Последняя версия Koa.js использует асинхронные функции в пользу обратных вызовов. Для обслуживания статических файлов вы можете использовать плагин koa-static .
Hapi.js поддерживает настройку и вращается вокруг настройки объекта server . Он использует плагины для расширения возможностей, таких как маршрутизация, аутентификация и так далее. Для обслуживания статических файлов нам понадобится плагин с именем inert .
У каждой из этих платформ есть свои плюсы и минусы, и они будут более очевидными для более крупных приложений, а не просто для обслуживания одной HTML-страницы. Выбор структуры будет сильно зависеть от реальных требований проекта, над которым вы работаете.
Источник
Веб-сервер на дому
В сегодняшней статье мы поговорим об организации своего домашнего веб-сервера. Шаг за шагом установим программное обеспечение, подключим нужные услуги у интернет-провайдера и протестируем сервер. Ну а перед тем, как перейти к реализации задуманного, буквально несколько слов о том, зачем все это вообще нужно. Неужели сторонних серверов недостаточно или цены на аренду/хостинг слишком велики?
Во-первых, домашний веб-сервер очень удобно использовать для отладки скриптов и тестирования определенных сайтов, не закачивая их при этом в Сеть. Просто, быстро, а самое главное — надежно. Ведь нередко кража скриптов происходит именно на стадии тестирования на стороне хостера. Сделали вы, скажем, скрипт, плохо его защитили, кто-то воспользовался брешью в системе безопасности вашей разработки — и вот у вашего творения уже новый владелец. Если же вы отлаживаете разработку на локальной машине, то этой проблемы нет, ведь доступ к компьютеру есть только у вас.
Во-вторых, свой сервер можно использовать для временной передачи больших объемов информации. Скажем, ваш друг попросил максимально быстро передать ему увесистый архив. У вас обоих быстрый интернет. Как поступить в данной ситуации? Разбить архив на несколько десятков или сотен мелких фрагментов и передать их товарищу по e-mail? Воспользоваться услугами платных хранилищ уровня Rapidshare, откуда «на халяву» файлы придется вытягивать несколько часов? А может быть, прибегнуть к P2P-сетям?
Можно, но ни один из перечисленных способов не является универсальным. Однако есть один очень интересный вариант решения этой проблемы. Развертываете домашний веб-сервер, открываете доступ к нужным файлам и передаете своему приятелю линк на скачку определенного файла со своей машины.
И, наконец, в-третьих, домашняя веб-станция — идеальный вариант для содержания огромного портала типа www.igromania.ru. Почему? Ну а какой хостинг-провайдер предоставит вам, скажем, 80, 100, а то и все 500 Гб для размещения модов, артов и 3D-моделей собственного производства, видеоматериалов и другой полезной информации? Можно арендовать выделенный сервер топ-конфигурации, но это лишь в том случае, если вы готовы ежемесячно отдавать за это от 1,5 до 15 тыс. рублей.
И не забывайте о главном! Имея в распоряжении мощный компьютер и договорившись предварительно со своим интернет-провайдером, вы вполне можете организовать собственный полноценный хостинговый центр, то есть попробовать себя в роли хостинг-провайдера.
Самое необходимое
Для организации полноценного веб-сервера на домашнем компьютере нам понадобятся:
1. Выделенный IP-адрес. Уникальный статичный цифровой адрес вида 87.176.117.42, который присваивается исключительно вашей машине при работе в интернете. Фактически именно он используется для доступа ко всем веб-серверам, однако зачастую для более удобного обращения к определенным порталам к нему привязывается короткое и легко запоминающееся доменное имя вида www.igromania.ru. Постоянный IP — платная услуга, подключается исключительно на стороне вашего интернет-провайдера.
2. Веб-сервер Apache для Windows/Linux. Один из самых надежных, популярных и, что немаловажно, бесплатных веб-серверов с открытым исходным кодом (Apache носит статус open source проекта). Именно этот сервер использует около 70% крупных интернет-станций. Главный и единственный недостаток серверного пакета — отсутствие удобного администраторского интерфейса.
3. PHP 4 или 5. Специальный интерпретатор для подключения к вашему серверу возможности обработки PHP-сценариев любой сложности.
4. MySQL. Удобная система управления базами данных (СУБД). Очень шустрая, практически безошибочная и предельно простая в использовании.
Привязка домена к IP-адресу — зачем и как? | |
Многие интернетчики задаются вопросом: зачем привязывать какой-то конкретный домен к IP-адресу, что за ересь такая, ведь домен — он и в Африке домен (то есть адрес сайта в Сети)? На самом деле такие пользователи не очень хорошо представляют себе схему работы большинства веб-серверов. Любой человек, перейдя по определенному адресу, например www.igromania.ru, автоматически перенаправляется на длинный цифровой адрес (IP) конечного веб-сервера. Иными словами, файлы, сайты и другие компоненты проживают не по каким-то буквенным адресам. Располагаются они как раз на машине, которой присвоен уникальный IP, а к нему, в свою очередь, привязан какой-то конкретный домен. Зачастую из-за описанного выше непонимания случаются следующие проблемы: «На сайте размещен нелегальный контент, надо связаться с администратором и удалить домен». И вот тут-то пользователь будет в корне неправ: а что если этот самый домен был сдан в аренду и просто припаркован к определенному серверу со своим IP? В таком случае всю ответственность несет исключительно хостинг-провайдер, но ни в коем случае не администратор (владелец) домена. Итак, давайте подведем итог всему сказанному и ответим на вопрос, зачем же нужна привязка доменов к буквенным названиям. Во-первых, это крайне удобно: конечному пользователю, то есть посетителю, не нужно запоминать сложные цифровые комбинации вида 85.129.178.38, достаточно просто держать в голове адрес, ссылающийся на данный IP. Во-вторых, трудно вычислить реальный IP ресурса (вы же знаете только название сайта — домен), а следовательно, относительно сложно его атаковать. Ну и, в-третьих, к одному IP можно прикрутить сколько угодно доменов, то есть, заходя на любой из сайтов, привязанных к вашему IP, пользователь будет попадать на один и тот же портал. А теперь давайте ответим на вопрос «как?», то есть поговорим о практической реализации привязки домена к конкретному IP-адресу. Первым делом зарегистрируйте на себя определенный домен. Сделать это лучше всего у тех регистраторов, которые позволяют пользователям самостоятельно изменять данные о зарегистрированных доменах сразу же после их делегирования, например, «Джино» (www.jino.ru) или WebNames.ru (www.webnames.ru). После этого зайдите в контрольную панель, перейдите в раздел управления доменами — управление DNS (в случае с «Джино») или DNS-сервера (в случае с WebNames) и переназначьте IP-адреса вида 217.107.217.17 на нужные вам — скажем, на IP собственного веб-сервера. Изменения вступят в силу по прошествии нескольких часов с момента окончания правки DNS-параметров. Ручная сборкаДавайте рассмотрим создание сервера вручную с использованием всех вышеописанных компонентов. Первым делом подключите услугу «Анонсированный IP-адрес» у своего интернет-провайдера. Как правило, цена на нее составляет около 150 рублей в месяц. Далее загляните на официальный сайт проекта Apache (http://httpd.apache.org) и загрузите последнюю версию веб-сервера под Windows (мы будем организовывать сервер исключительно под управлением этой операционной системы). Запустите исполняемый файл и следуйте инструкциям по инсталляции. Не забудьте в ходе установки указать анонсированный IP-адрес вашей машины. Ведь именно он будет использоваться для подключения к вашему серверу через интернет. Веб-сервер Apache — один из самых быстрых и надежных, на нем исправно функционирует порядка 70% крупных интернет-сайтов. После того как установили программу, приступаем к настройке сервера. Перейдите в каталог \conf с установленным Apache (как правило, это директория C:\Program Files\Apache Group\Apache\conf). В данной директории содержится несколько конфигурационных файлов сервера. Нас интересует лишь один из них — httpd.conf. Он включает в себя базовые настройки серверной станции типа директорий хранения документов, блокировки заданного диапазона или отдельно взятых IP-адресов, название машины, блоки, которые отвечают за активацию независимых модулей. Исправим основные характеристики сервера, заключенные в тело данного файла. Откройте «Блокнотом» файл httpd.conf. Задайте определенное имя своей веб-станции. Для этого отыщите в httpd.conf ключевое слово ServerName, впишите после него произвольное название сервера, удалите значок решетки (#) в начале строки перед директивой, чтобы данный атрибут (название сервера) не игнорировался компилятором. Затем модифицируйте путь, прописанный после директивы DocumentRoot, скажем, DocumentRoot «C:/Program Files/Apache Group/Apache/htdocs» на наиболее удобный для вас, например: «C:/www/docs». После выполнения данного действия не забудьте создать одноименный каталог на диске для хранения HTML-документов, в противном случае Apache наотрез откажется запускаться. Следующий шаг — установка или настройка скриптовых псевдонимов. Отыщите строку ScriptAlias /cgi-bin/ «C:/Program Files/Apache Group/Apache/cgi-bin/» и поправьте указанный в ней путь на C:/www/cgi-bin/ (ведь основной-то путь мы изменили). Зачем это нужно? Для того чтобы при вводе в адресной строке интернет-браузера ссылки вида http://localhost/cgi-bin выполнялось обращение к реальной директории C:/www/cgi-bin/, содержащей определенные CGI-файлы. Выполним окончательную привязку ряда настроек для каталога C:\www. Найдите в файле конфигурации httpd.conf следующий блок параметров: Узнать свой выделенный IP можно, введя в командной строке Windows ключевое слово ipconfig и нажав Enter. Источник |