Когда сервер получает очередной запрос от клиента, для этого запроса создается объект типа HttpRequest. Этот класс реализует интерфейс класса Stream и поэтому представляет поток для чтения.
HttpRequest позволяет получить информацию чтобы ряда свойств:
contentLength
: длина тела запроса
cookies
: куки, отправленные клиентом, в виде объекта List<Cookie>
headers
: заголовки запроса (объект HttpHeaders)
method
: метод запроса, например, GET, POST, PUT и т.д.
requestedUri
: запрошенный адрес в виде объекта Uri
response
: объект HttpResponse, который ассоциирован с данным запрос и который используется для отправки ответа
uri
: запрошенный путь в виде объекта Uri
Данную информацию мы можем использовать при обработке запросов. Например, в зависимости от запрошенного пути отправим клиенту тот или иной ответ:
import 'dart:io'; void main() async { var server = await HttpServer.bind(InternetAddress.anyIPv6, 8888); print("Сервер запущен..."); await server.forEach((HttpRequest request) { var responseText = "Page Not Found"; switch (request.uri.path) { case "/": // если обращение к главной странице responseText = "Index Page"; case "/about": // если обращение по пути "/about" responseText = "About Page"; case "/contact": // если обращение по пути "/contacts" responseText = "Contacts Page"; } final response = request.response; response.write(responseText); response.close(); }); }
Класс Uri
имеет свойство path, которое хранит запрошенный путь. В примере выше мы проверяем запрошенный путь
switch (request.uri.path)
и в зависимости от его значения устанавливаем соответствующий текст для отправки клиенту. В данном случае мы устанавливаем определенные значения для запросов по путям "/" (обращение к главной странице), "/about" и "/contact". При запросах по другим путям будет отправляться текст по умолчанию: