Класс HttpServer
Сервер, предоставляющий контент, такой как веб-страницы, с помощью протокола HTTP.
HttpServer — это поток, который предоставляет объекты HttpRequest. Каждый HttpRequest имеет связанный объект HttpResponse. Сервер отвечает на запрос, записывая данные в этот объект HttpResponse. Следующий пример демонстрирует, как привязать HttpServer к IPv6 InternetAddress на порту 80 (стандартный порт для HTTP-серверов) и как прослушивать запросы. Порт 80 — это стандартный HTTP-порт. Однако доступ к нему на большинстве систем требует привилегий суперпользователя. Для локального тестирования рекомендуется использовать нерезервированный порт (1024 и выше).
END_OF_DOCUMENT_MARKERНеполные запросы, в которых отсутствует заголовок или его часть, игнорируются, и для них не генерируются исключения или объекты HttpRequest. Аналогично, при записи в HttpResponse любые исключения Socket игнорируются, и любые будущие записи игнорируются.
HttpRequest предоставляет заголовки запроса и, если они существуют, тело запроса в виде потока данных. Если тело не прочитано, оно сбрасывается, когда сервер записывает в HttpResponse или закрывает его.
Привязка с безопасным соединением HTTPS
Используйте bindSecure для создания HTTPS-сервера.
Сервер предоставляет клиенту сертификат. Цепочка сертификатов и закрытый ключ задаются в объекте SecurityContext, который передаётся в bindSecure.
END_OF_DOCUMENT_MARKERСертификаты и ключи — это файлы PEM, которые можно создавать и управлять ими с помощью инструментов OpenSSL.
Подключение к сокету сервера
Вы можете использовать конструктор listenOn для подключения HTTP-сервера к ServerSocket.
Другие ресурсы
-
HttpServer является потоком. Обратитесь к классу Stream для получения информации о потоковых возможностях HttpServer. Приостановка подписки на поток приостанавливает работу на уровне ОС.
-
Пакет shelf на pub.dartlang.org содержит набор высокоуровневых классов, которые вместе с этим классом упрощают предоставление контента через HTTP-серверы.
- Реализует
Статические методы
- bind(
address, int port, { int backlog: 0, bool v6Only: false, bool shared: false }) → Future<HttpServer> -
Начинает прослушивание HTTP-запросов на указанном
addressиport. - bindSecure(
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 и использует первое значение в списке. Для прослушивания на локальном адаптере, который позволит только входящим подключениям с локального хоста, используйте значение InternetAddress.LOOPBACK_IP_V4 или InternetAddress.LOOPBACK_IP_V6. Для разрешения входящих подключений из сети используйте одно из значений InternetAddress.ANY_IP_V4 или InternetAddress.ANY_IP_V6, чтобы привязаться ко всем интерфейсам или IP-адресу конкретного интерфейса.
Конструкторы
- HttpServer.listenOn(ServerSocket serverSocket) factory
-
Привязывает HTTP-сервер к существующему ServerSocket. При закрытии HttpServer он просто отсоединится, закрыв текущие соединения, но не закрывая
serverSocket.
Свойства
- address → InternetAddress только для чтения
-
Возвращает адрес, на котором прослушивает сервер. Это можно использовать для получения фактического адреса, когда адрес получен по запросу имени хоста.
- autoCompress → bool чтение/запись
-
Указывает, должен ли HttpServer сжимать контент, если это возможно.
- defaultResponseHeaders → HttpHeaders только для чтения
-
Набор заголовков по умолчанию, добавляемых ко всем объектам ответа.
- idleTimeout → Duration чтение/запись
-
Получение или установка таймаута, используемого для бездействующих соединений keep-alive. Если в течение idleTimeout после завершения предыдущего запроса не поступает дальнейших запросов, соединение закрывается.
- port → int только для чтения
-
Возвращает порт, на котором прослушивает сервер. Это можно использовать для получения фактического порта, когда значение 0 для
portуказано в вызовеbindилиbindSecure. - serverHeader → String чтение/запись
-
Получение и установка значения заголовка
Serverпо умолчанию для всех ответов, генерируемых этим HttpServer. - sessionTimeout → int только для записи
-
Устанавливает таймаут в секундах для сеансов этого
HttpServer. Таймаут по умолчанию составляет 20 минут. - first → Future<HttpRequest> только для чтения, унаследованное
-
Возвращает первый элемент потока.
- hashCode → int только для чтения, унаследованное
-
Хэш-код этого объекта.
- isBroadcast → bool только для чтения, унаследованное
-
Указывает, является ли этот поток потоком широковещательной передачи.
- isEmpty → Future<bool> только для чтения, унаследованное
-
Указывает, содержит ли этот поток какие-либо элементы.
- last → Future<HttpRequest> только для чтения, унаследованное
-
Возвращает последний элемент потока.
- length → Future<int> только для чтения, унаследованное
-
Подсчитывает элементы в потоке.
- runtimeType → Type только для чтения, унаследованное
-
Представление типа объекта во время выполнения.
- single → Future<HttpRequest> только для чтения, унаследованное
-
Возвращает единственный элемент.
Операторы
- operator ==(
other) → bool унаследованное -
Оператор равенства.
Методы
- close(
{bool force: false }) → Future -
Постоянно останавливает прослушивание новых соединений этим HttpServer. Это закрывает поток HttpRequest с событием завершения. Возвращенное будущее завершается, когда сервер остановлен. Для сервера, запущенного с помощью bind или bindSecure, это означает, что порт, на котором происходит прослушивание, больше не используется.
- connectionsInfo(
) → HttpConnectionsInfo -
Возвращает объект HttpConnectionsInfo, суммирующий количество текущих соединений, обрабатываемых сервером.
- any(
bool test(T element)) → Future<bool> inherited -
Проверяет, принимает ли
testлюбой элемент, предоставленный этим потоком. - asBroadcastStream(
{void onListen(StreamSubscription<T> subscription), void onCancel(StreamSubscription<T> subscription) }) → Stream<HttpRequest> inherited -
Возвращает поток с множественной подпиской, который генерирует те же события, что и этот.
- asyncExpand<E>(
Stream<E> convert(T event)) → Stream<E> inherited -
Создает новый поток с событиями потока на основе исходного события.
- asyncMap<E>(
dynamic convert(T event)) → Stream<E> inherited -
Создает новый поток, асинхронно отображающий каждое событие данных из этого потока в новое событие.
- contains(
Object needle) → Future<bool> inherited -
Проверяет, встречается ли
needleв элементах, предоставленных этим потоком. - distinct(
[bool equals(T previous, T next) ]) → Stream<HttpRequest> inherited -
Пропускает события данных, если они равны предыдущему событию данных.
- drain<E>(
[E futureValue ]) → Future<E> inherited -
Отбрасывает все данные в потоке, но сигнализирует о завершении или возникновении ошибки.
- elementAt(
int index) → Future<HttpRequest> inherited -
Возвращает значение
index-го события данных этого потока. - every(
bool test(T element)) → Future<bool> inherited -
Проверяет, принимает ли
testвсе элементы, предоставляемые этим потоком. - expand<S>(
Iterable<S> convert(T value)) → Stream<S> inherited -
Создает новый поток из этого потока, преобразующий каждый элемент в ноль или более событий.
- firstWhere(
bool test(T element), { Object defaultValue() }) → Future inherited -
Находит первый элемент этого потока, соответствующий
test. - fold<S>(
S initialValue, S combine(S previous, T element)) → Future<S> inherited -
Редуцирует последовательность значений, многократно применяя
combine. - forEach(
void action(T element)) → Future inherited -
Выполняет
actionдля каждого события данных потока. - handleError(
Function onError, { bool test(error) }) → Stream<HttpRequest> inherited -
Создаёт обёртку потока, перехватывающую некоторые ошибки из этого потока.
- join(
[String separator = "" ]) → Future<String> inherited -
Собирает строку представлений событий данных в строковом формате.
- lastWhere(
bool test(T element), { Object defaultValue() }) → Future inherited -
Находит последний элемент в этом потоке, соответствующий
test. - listen(
void onData(T event), { Function onError, void onDone(), bool cancelOnError }) → StreamSubscription<HttpRequest> inherited -
Добавляет подписку на этот поток.
- map<S>(
S convert(T event)) → Stream<S> inherited -
Создает новый поток, преобразующий каждый элемент этого потока в новое значение с использованием функции
convert. - noSuchMethod(
Invocation invocation) → dynamic inherited -
Вызывается при доступе к несуществующему методу или свойству.
- pipe(
StreamConsumer<HttpRequest> streamConsumer) → Future inherited -
Перенаправляет события этого потока в
streamConsumer. - reduce(
HttpRequest combine(T previous, T element)) → Future<HttpRequest> inherited -
Редуцирует последовательность значений, многократно применяя
combine. - singleWhere(
bool test(T element)) → Future<HttpRequest> inherited -
Находит единственный элемент в этом потоке, соответствующий
test. - skip(
int count) → Stream<HttpRequest> inherited -
Пропускает первые
countсобытия данных из этого потока. - skipWhile(
bool test(T element)) → Stream<HttpRequest> inherited -
Пропускает события данных из этого потока, пока они соответствуют
test. - take(
int count) → Stream<HttpRequest> inherited -
Предоставляет не более первых
countсобытий данных этого потока. - takeWhile(
bool test(T element)) → Stream<HttpRequest> inherited -
Передает события данных, пока
testуспешно. - timeout(
Duration timeLimit, { void onTimeout(EventSink<T> sink) }) → Stream<HttpRequest> inherited -
Создаёт новый поток с теми же событиями, что и этот поток.
- toList(
) → Future<List<HttpRequest>> inherited
-
Собирает данные этого потока в список.
- toSet(
) → Future<Множество<HttpRequest>> inherited -
Собирает данные этого потока в множество.
- toString(
) → Строка inherited -
Возвращает строковое представление этого объекта.
- transform<S>(
StreamTransformer<HttpRequest, S> streamTransformer) → Поток<S> inherited -
Цепочкой этот поток как вход для предоставленного StreamTransformer.
- where(
bool test(T event)) → Поток<HttpRequest> inherited -
Создаёт новый поток из этого потока, который пропускает некоторые события данных.
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-io/HttpServer-class.html