Куда приходит HTTP-запрос от клиента в веб-приложении?

«Куда приходит HTTP-запрос от клиента в веб-приложении?» — вопрос из категории Сети, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Путь HTTP-запроса в типичном ASP.NET Core приложении выглядит так:

  1. Веб-сервер (Kestrel/IIS/Nginx): Запрос принимается сервером. Kestrel — это встроенный кроссплатформенный веб-сервер в ASP.NET Core.
  2. Конвейер Middleware: Запрос попадает в конвейер middleware, где компоненты выполняются последовательно.
    // Program.cs - пример конвейера
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseAuthentication(); // Middleware аутентификации
    app.UseAuthorization();  // Middleware авторизации
    app.UseRouting();
  3. Маршрутизация (Endpoint Routing): Система маршрутизации сопоставляет URL и метод HTTP (GET, POST) с конкретным действием (endpoint).
  4. Конечная точка (Endpoint): Запрос выполняется в целевом обработчике. Это может быть:
    • Минимальный API:
      app.MapGet("/api/users/{id}", (int id) => {
          // Бизнес-логика
          return Results.Ok(user);
      });
    • Контроллер MVC/Web API:
      [ApiController]
      [Route("api/[controller]")]
      public class UsersController : ControllerBase
      {
          [HttpGet("{id}")]
          public IActionResult GetUser(int id) {
              // Бизнес-логика
              return Ok(user);
          }
      }
  5. Ответ: Результат действия проходит обратно по конвейеру middleware (например, для логирования или добавления заголовков) и отправляется клиенту через веб-сервер.