Spec-Zone.ru › Dart 2

dart:io

Класс HttpServer

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

Примечание: HttpServer предоставляет низкоуровневые функции HTTP. Рекомендуем оценить высокоуровневые API, рассмотренные в разделе Создание HTTP-серверов на сайте dart.dev.

HttpServer — это Stream, предоставляющий объекты HttpRequest. С каждым HttpRequest связан объект HttpResponse. Сервер отвечает на запрос, записывая данные в этот объект HttpResponse. В следующем примере показано, как привязать HttpServer к IPv6-адресу InternetAddress на порту 80 (стандартном порту для HTTP-серверов) и как прослушивать запросы. Порт 80 — это порт HTTP по умолчанию. Однако в большинстве систем для доступа к нему требуются права суперпользователя. Для локального тестирования рассмотрите возможность использования незарезервированного порта (1024 и выше).

import 'dart:io';

void main() async {
  var server = await HttpServer.bind(InternetAddress.anyIPv6, 80);
  await server.forEach((HttpRequest request) {
    request.response.write('Hello, world!');
    request.response.close();
  });
}

Неполные запросы, в которых отсутствует весь заголовок или его часть, игнорируются; для них не генерируются исключения или объекты HttpRequest. Аналогично, при записи в HttpResponse любые исключения Socket игнорируются, как и любые последующие операции записи.

HttpRequest предоставляет заголовки запроса, а также тело запроса, если оно есть, в виде потока данных. Если тело не было прочитано, оно отбрасывается при записи сервера в HttpResponse или при его закрытии.

Привязка с защищённым HTTPS-соединением

Используйте bindSecure, чтобы создать HTTPS-сервер.

Сервер предъявляет клиенту сертификат. Цепочка сертификатов и закрытый ключ задаются в объекте SecurityContext, передаваемом в bindSecure.

import 'dart:io';

void main() async {
  var chain =
      Platform.script.resolve('certificates/server_chain.pem').toFilePath();
  var key = Platform.script.resolve('certificates/server_key.pem').toFilePath();
  var context = SecurityContext()
    ..useCertificateChain(chain)
    ..usePrivateKey(key, password: 'dartdart');
  var server =
      await HttpServer.bindSecure(InternetAddress.anyIPv6, 443, context);
  await server.forEach((HttpRequest request) {
    request.response.write('Hello, world!');
    request.response.close();
  });
}

Сертификаты и ключи представлены PEM-файлами, которые можно создавать и обрабатывать с помощью инструментов OpenSSL.

Реализуемые типы
  • Stream<HttpRequest>

Конструкторы

HttpServer.listenOn(ServerSocket serverSocket)
фабричный
Присоединяет HTTP-сервер к существующему ServerSocket. При закрытии HttpServer он просто отсоединяется, закрывая текущие соединения, но не закрывая serverSocket.

Свойства

address → InternetAddress
только для чтения
Адрес, который прослушивает сервер.
autoCompress ↔ bool
чтение и запись
Нужно ли HttpServer сжимать контент, если это возможно.
defaultResponseHeaders → HttpHeaders
только для чтения
Набор заголовков по умолчанию, добавляемых ко всем объектам ответа.
first → Future<HttpRequest>
только для чтения, унаследованное
Первый элемент этого потока.
hashCode → int
только для чтения, унаследованное
Хеш-код этого объекта.
idleTimeout ↔ Duration?
чтение и запись
Получает или задаёт время ожидания для незанятых постоянных соединений. Если в течение периода idleTimeout после завершения предыдущего запроса не поступает новый запрос, соединение разрывается.
isBroadcast → bool
только для чтения, унаследованное
Является ли этот поток широковещательным.
isEmpty → Future<bool>
только для чтения, унаследованное
Содержит ли этот поток какие-либо элементы.
last → Future<HttpRequest>
только для чтения, унаследованное
Последний элемент этого потока.
length → Future<int>
только для чтения, унаследованное
Количество элементов в этом потоке.
port → int
только для чтения
Порт, который прослушивает сервер.
runtimeType → Type
только для чтения, унаследованное
Представление типа объекта во время выполнения.
serverHeader ↔ String?
чтение и запись
Получает и задаёт значение по умолчанию заголовка Server для всех ответов, созданных этим HttpServer.
sessionTimeout ← int
только для записи
Задаёт время ожидания в секундах для сеансов этого HttpServer.
single → Future<HttpRequest>
только для чтения, унаследованное
Единственный элемент этого потока.

Методы

any(bool test(HttpRequest element)) → Future<bool>
унаследованный
Проверяет, принимает ли test какой-либо элемент, предоставленный этим потоком.
asBroadcastStream({void onListen(StreamSubscription<HttpRequest> subscription)?, void onCancel(StreamSubscription<HttpRequest> subscription)?}) → Stream<HttpRequest>
унаследованный
Возвращает поток с несколькими подписками, выдающий те же события, что и этот поток.
asyncExpand<E>(Stream<E>? convert(HttpRequest event)) → Stream<E>
унаследованный
Преобразует каждый элемент в последовательность асинхронных событий.
asyncMap<E>(FutureOr<E> convert(HttpRequest event)) → Stream<E>
унаследованный
Создаёт новый поток, в котором каждое событие данных этого потока асинхронно преобразуется в новое событие.
cast<R>() → Stream<R>
унаследованный
Адаптирует этот поток, чтобы он стал Stream<R>.
close({bool force = false}) → Future
Окончательно прекращает прослушивание этим HttpServer новых соединений. Закрывает Stream объектов HttpRequest событием завершения. Возвращённый future завершается, когда сервер остановлен. Для сервера, запущенного с помощью bind или bindSecure, это означает, что прослушиваемый порт больше не используется.
connectionsInfo() → HttpConnectionsInfo
Объект HttpConnectionsInfo, содержащий сводные сведения о количестве текущих соединений, обрабатываемых сервером.
contains(Object? needle) → Future<bool>
унаследованный
Возвращает, встречается ли needle среди элементов, предоставляемых этим потоком.
distinct([bool equals(HttpRequest previous, HttpRequest next)?]) → Stream<HttpRequest>
унаследованный
Пропускает события данных, равные предыдущему событию данных.
drain<E>([E? futureValue]) → Future<E>
унаследованный
Отбрасывает все данные этого потока, но сообщает о его завершении или возникновении ошибки.
elementAt(int index) → Future<HttpRequest>
унаследованный
Возвращает значение index-го события данных этого потока.
every(bool test(HttpRequest element)) → Future<bool>
унаследованный
Проверяет, принимает ли test все элементы, предоставленные этим потоком.
expand<S>(Iterable<S> convert(HttpRequest element)) → Stream<S>
унаследованный
Преобразует каждый элемент этого потока в последовательность элементов.
firstWhere(bool test(HttpRequest element), {HttpRequest orElse()?}) → Future<HttpRequest>
унаследованный
Находит первый элемент этого потока, соответствующий test.
fold<S>(S initialValue, S combine(S previous, HttpRequest element)) → Future<S>
унаследованный
Объединяет последовательность значений, многократно применяя combine.
forEach(void action(HttpRequest element)) → Future
унаследованный
Выполняет action для каждого элемента этого потока.
handleError(Function onError, {bool test(dynamic error)?}) → Stream<HttpRequest>
унаследованный
Создаёт поток-обёртку, перехватывающий некоторые ошибки этого потока.
join([String separator = ""]) → Future<String>
унаследованный
Объединяет строковые представления элементов в одну строку.
lastWhere(bool test(HttpRequest element), {HttpRequest orElse()?}) → Future<HttpRequest>
унаследованный
Находит последний элемент этого потока, соответствующий test.
listen(void onData(HttpRequest event)?, {Function? onError, void onDone()?, bool? cancelOnError}) → StreamSubscription<HttpRequest>
унаследованный
Добавляет подписку на этот поток.
map<S>(S convert(HttpRequest event)) → Stream<S>
унаследованный
Преобразует каждый элемент этого потока в новое событие потока.
noSuchMethod(Invocation invocation) → dynamic
унаследованный
Вызывается при обращении к несуществующему методу или свойству.
pipe(StreamConsumer<HttpRequest> streamConsumer) → Future
унаследованный
Передаёт события этого потока в streamConsumer.
reduce(HttpRequest combine(HttpRequest previous, HttpRequest element)) → Future<HttpRequest>
унаследованный
Объединяет последовательность значений, многократно применяя combine.
singleWhere(bool test(HttpRequest element), {HttpRequest orElse()?}) → Future<HttpRequest>
унаследованный
Находит единственный элемент этого потока, соответствующий test.
skip(int count) → Stream<HttpRequest>
унаследованный
Пропускает первые count событий данных этого потока.
skipWhile(bool test(HttpRequest element)) → Stream<HttpRequest>
унаследованный
Пропускает события данных этого потока, пока они соответствуют test.
take(int count) → Stream<HttpRequest>
унаследованный
Предоставляет не более первых count событий данных этого потока.
takeWhile(bool test(HttpRequest element)) → Stream<HttpRequest>
унаследованный
Передаёт события данных, пока test возвращает true.
timeout(Duration timeLimit, {void onTimeout(EventSink<HttpRequest> sink)?}) → Stream<HttpRequest>
унаследованный
Создаёт новый поток с теми же событиями, что и у этого потока.
toList() → Future<List<HttpRequest>>
унаследованный
Собирает все элементы этого потока в List.
toSet() → Future<Set<HttpRequest>>
унаследованный
Собирает данные этого потока в Set.
toString() → String
унаследованный
Строковое представление этого объекта.
transform<S>(StreamTransformer<HttpRequest, S> streamTransformer) → Stream<S>
унаследованный
Применяет streamTransformer к этому потоку.
where(bool test(HttpRequest event)) → Stream<HttpRequest>
унаследованный
Создаёт на основе этого потока новый поток, отбрасывающий некоторые элементы.

Операторы

operator ==(Object other) → bool
унаследованный
Оператор равенства.

Статические методы

bind(dynamic address, int port, {int backlog = 0, bool v6Only = false, bool shared = false}) → Future<HttpServer>
Начинает прослушивание HTTP-запросов по указанным address и port.
bindSecure(dynamic address, int port, SecurityContext context, {int backlog = 0, bool v6Only = false, bool requestClientCertificate = false, bool shared = false}) → Future<HttpServer>
address может быть строкой String или объектом InternetAddress. Если address — строка String, bind выполнит поиск InternetAddress.lookup и использует первое значение в списке. Чтобы прослушивать адаптер loopback, который разрешает только входящие соединения с локального компьютера, используйте значение InternetAddress.loopbackIPv4 или InternetAddress.loopbackIPv6. Чтобы разрешить входящие соединения из сети, используйте одно из значений InternetAddress.anyIPv4 или InternetAddress.anyIPv6 для привязки ко всем интерфейсам либо IP-адрес конкретного интерфейса.

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-io/HttpServer-class.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API