Spec-Zone.ru › Dart 2

dart:io

HttpServer класс

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

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

HttpServer — это поток, который предоставляет объекты 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.

Реализованные типы
  • Поток<HttpRequest>

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

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

Свойства

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

Операторы

operator ==(Object other) → bool
inherited
Оператор равенства.

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

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 может быть строкой или объектом InternetAddress. Если address является строкой, bind выполнит InternetAddress.lookup и использует первое значение в списке. Чтобы прослушивать на адаптере обратной связи, который позволит только входящие подключения с локального хоста, используйте значение 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.18.5/dart-io/HttpServer-class.html

Spec-Zone.ru

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