Книга: Выразительный JavaScript
Модуль HTTP
Модуль HTTP
Ещё один основной модуль — "http"
. Он даёт функционал для создания HTTP серверов и HTTP-запросов.
Вот всё, что нужно для запуска простейшего HTTP сервера:
var http = require("http");
var server = http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/html"});
response.write("<h1>Привет!</h1><p>Вы запросили `"
request.url + "`</p>");
response.end();
});
server.listen(8000);
Запустив скрипт на своей машины, вы можете направить браузер по адресу localhost:8000/hello, таким образом создав запрос к серверу. Он ответит небольшой HTML-страницей.
Функция, передаваемая как аргумент к createServer
, вызывается при каждой попытке соединения с сервером. Переменные request
и response
– объекты, представляющие входные и выходные данные. Первый содержит информацию по запросу, например свойство url
содержит URL запроса.
Чтобы отправить что-то назад, используются методы объекта response
. Первый, writeHead
, пишет заголовки ответа (см. главу 17). Вы даёте ему код статуса (в этом случае 200 для “OK”) и объект, содержащий значения заголовков. Здесь мы сообщаем клиенту, что он должен ждать документ HTML.
Затем идёт тело ответа (сам документ), отправляемое через response.write
. Этот метод можно вызывать несколько раз, если хотите отправлять ответ по кускам, к примеру, передавая потоковые данные по мере их поступления. Наконец, response.end
сигнализирует конец ответа.
Вызов server.listen
заставляет сервер слушать запросы на порту 8000. Поэтому вам надо в браузере заходить на localhost:8000, а не просто на localhost (где портом по умолчанию будет 80).
Для остановки такого скрипта Node, который не завершается автоматически, потому что ожидает следующих событий (в данном случае, соединений), надо нажать Ctrl-C.
Настоящий веб-сервер делает гораздо больше того, что описано в примере. Он смотрит на метод запроса (свойство method
), чтобы понять, какое действие пытается выполнить клиент, и на URL запроса, чтобы понять, на каком ресурсе это действие должно выполняться. Далее вы увидите более продвинутую версию сервера.
Чтобы сделать HTTP-клиент, мы можем использовать функцию “http”
модуля request
.
var http = require("http");
var request = http.request({
hostname: "eloquentjavascript.net",
path: "/20_node.html",
method: "GET",
headers: {Accept: "text/html"}
}, function(response) {
console.log("Сервис ответил с кодом ",
response.statusCode);
});
request.end();
Первый аргумент request
настраивает запрос, объясняя Node, с каким сервером будем общаться, какой путь будет у запроса, какой метод использовать, и т. д. Второй – функция, которую надо будет вызвать по окончанию запроса. Ей передаётся объект response
, в котором содержится вся информация по ответу – к примеру, код статуса.
Как и объект response
сервера, объект, возвращаемый request
, позволяет передавать данные методом write
и заканчивать запрос методом end
. В примере не используется write
, потому что запросы GET
не должны содержать данных в теле.
Для запросов на безопасные URL (HTTPS), Node предлагает модуль https
, в котором есть своя функция запроса, схожая с http.request
.
- Листинг 11.4. (server.c) Реализация HTTP-сервера
- 12.2.1. Пример использования Node: HTTP-сервер
- 12.2.2. Пример использования Node: модуль утилит клиента HTTP
- 12.6. Пример файла httpd.conf
- Как работает модуль оперативной памяти
- 9.3.1. HTTP-директивы
- Модульный HTML
- XMLHttpRequest
- Модуль GraphABC
- Editing httpd.conf
- Модуль RobotTaskMaker
- Модуль поддержки NetBIOS через TCP