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.
- Реализованные типы
Конструкторы
- 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