Cómo se hacen coincidir las solicitudes con una regla de enrutamientoHow requests are matched to a routing rule

Después de establecer una conexión y de completar un protocolo de enlace TLS, cuando una solicitud llega a un entorno de Front Door, una de las primeras cosas que hace Front Door es determinar con qué regla de enrutamiento concreta hacer coincidir la solicitud y, luego, emprende la acción definida en la configuración.After establishing a connection and completing a TLS handshake, when a request lands on a Front Door environment one of the first things that Front Door does is determine which particular routing rule to match the request to and then take the defined action in the configuration. El siguiente documento explica el modo en que Front Door determina qué configuración de enrutamiento se usará al procesar una solicitud HTTP.The following document explains how Front Door determines which Route configuration to use when processing an HTTP request.

Estructura de una configuración de enrutamiento de Front DoorStructure of a Front Door route configuration

Una configuración de regla de enrutamiento de Front Door se compone de dos partes principales: un "lado izquierdo" y un "lado derecho".A Front Door routing rule configuration is composed of two major parts: a "left-hand side" and a "right-hand side". La solicitud entrante se hace coincidir con el lado izquierdo de la ruta mientras que el lado derecho define cómo se procesa la solicitud.We match the incoming request to the left-hand side of the route while the right-hand side defines how we process the request.

Coincidencia de entrada (lado izquierdo)Incoming match (left-hand side)

Las propiedades siguientes determinan si la solicitud entrante coincide con la regla de enrutamiento (o el lado izquierdo):The following properties determine whether the incoming request matches the routing rule (or left-hand side):

  • Protocolos HTTP (HTTP/HTTPS)HTTP Protocols (HTTP/HTTPS)
  • Hosts (por ejemplo, www.foo.com, *.bar.com)Hosts (for example, www.foo.com, *.bar.com)
  • Rutas de acceso (por ejemplo, /*, /Users/*, /file.gif)Paths (for example, /*, /users/*, /file.gif)

Estas propiedades se expanden de forma interna para que cada combinación de protocolo, host y ruta de acceso sea un conjunto de posible coincidencia.These properties are expanded out internally so that every combination of Protocol/Host/Path is a potential match set.

Datos de ruta (lado derecho)Route data (right-hand side)

La decisión de cómo procesar la solicitud depende de si el almacenamiento en caché está habilitado o no para la ruta específica.The decision of how to process the request, depends on whether caching is enabled or not for the specific route. Por lo tanto, si no tenemos una respuesta almacenada en caché para la solicitud, reenviaremos la solicitud al back-end adecuado en el grupo de back-end configurado.So, if we don't have a cached response for the request, we'll forward the request to the appropriate backend in the configured backend pool.

Búsqueda de coincidencia de rutaRoute matching

Esta sección se centrará en cómo se busca la coincidencia con una regla de enrutamiento de Front Door determinada.This section will focus on how we match to a given Front Door routing rule. El concepto básico es que siempre coincidimos con la regla coincidencia más específica primero fijándonos solo en el "lado izquierdo".The basic concept is that we always match to the most-specific match first looking only at the "left-hand side". En primer lugar, buscamos la coincidencia en función del protocolo HTTP, el host de front-end y, luego, la ruta de acceso.We first match based on HTTP protocol, then Frontend host, then the Path.

Coincidencia de host de front-endFrontend host matching

Al comparar los hosts de front-end, utilizamos la lógica que se define a continuación:When matching Frontend hosts, we use the logic defined below:

  1. Busque cualquier enrutamiento con una coincidencia exacta en el host.Look for any routing with an exact match on the host.
  2. Si no hay una coincidencia de hosts de front-end exacta, rechace la solicitud y envíe un error 400 de solicitud incorrecta.If no exact frontend hosts match, reject the request and send a 400 Bad Request error.

Para explicar más este proceso, echemos un vistazo a un ejemplo de configuración de rutas de Front Door (solo para el lado izquierdo):To explain this process further, let's look at an example configuration of Front Door routes (left-hand side only):

Regla de enrutamientoRouting rule Hosts de front-endFrontend hosts PathPath
UnA foo.contoso.comfoo.contoso.com /*
BB foo.contoso.comfoo.contoso.com /users/*/users/*
CC www.fabrikam.com, foo.adventure-works.comwww.fabrikam.com, foo.adventure-works.com /*, /images/*/*, /images/*

Si las siguientes solicitudes entrantes se enviaron a Front Door, coincidirían con las siguientes reglas de enrutamiento anteriores:If the following incoming requests were sent to Front Door, they would match against the following routing rules from above:

Host de front-end entranteIncoming frontend host Reglas de enrutamientos que coincidenMatched routing rule(s)
foo.contoso.comfoo.contoso.com A, BA, B
www.fabrikam.comwww.fabrikam.com CC
images.fabrikam.comimages.fabrikam.com Error 400: Bad RequestError 400: Bad Request
foo.adventure-works.comfoo.adventure-works.com CC
contoso.comcontoso.com Error 400: Bad RequestError 400: Bad Request
www.adventure-works.comwww.adventure-works.com Error 400: Bad RequestError 400: Bad Request
www.northwindtraders.comwww.northwindtraders.com Error 400: Bad RequestError 400: Bad Request

Coincidencia de ruta de accesoPath matching

Después de determinar el host de front-end específico y filtrar las reglas de enrutamiento posibles a solo las rutas con ese host de front-end, Front Door filtra las reglas de enrutamiento según la ruta de acceso de la solicitud.After determining the specific frontend host and filtering possible routing rules to just the routes with that frontend host, Front Door then filters the routing rules based on the request path. Utilizamos una lógica similar que los hosts de front-end:We use a similar logic as frontend hosts:

  1. Busque cualquier regla enrutamiento con una coincidencia exacta con la ruta de acceso.Look for any routing rule with an exact match on the Path
  2. Si ninguna ruta de acceso presenta una coincidencia exacta, busque las reglas de enrutamiento con una ruta de acceso con un carácter comodín que coincida.If no exact match Paths, look for routing rules with a wildcard Path that matches
  3. Si no hay reglas de enrutamiento con una ruta coincidente, rechace la solicitud y devuelva una respuesta de error HTTP 400: solicitud incorrecta.If no routing rules are found with a matching Path, then reject the request and return a 400: Bad Request error HTTP response.

Nota

Las rutas de acceso sin un carácter comodín se consideran con coincidencia exacta.Any Paths without a wildcard are considered to be exact-match Paths. Incluso si la ruta de acceso termina en una barra diagonal, todavía se considera una coincidencia exacta.Even if the Path ends in a slash, it's still considered exact match.

Para explicarlo mejor, echemos un vistazo a otra serie de ejemplos:To explain further, let's look at another set of examples:

Regla de enrutamientoRouting rule Host de front-endFrontend host PathPath
UnA www.contoso.comwww.contoso.com /
BB www.contoso.comwww.contoso.com /*
CC www.contoso.comwww.contoso.com /ab/ab
DD www.contoso.comwww.contoso.com /abc/abc
EE www.contoso.comwww.contoso.com /abc//abc/
FF www.contoso.comwww.contoso.com /abc/*/abc/*
GG www.contoso.comwww.contoso.com /abc/def/abc/def
HH www.contoso.comwww.contoso.com /path//path/

Dada esa configuración, daría lugar a la tabla de búsqueda de coincidencias de ejemplo siguiente:Given that configuration, the following example matching table would result:

Solicitud entranteIncoming Request Ruta coincidenteMatched Route
www.contoso.com/www.contoso.com/ UnA
www.contoso.com/awww.contoso.com/a BB
www.contoso.com/abwww.contoso.com/ab CC
www.contoso.com/abcwww.contoso.com/abc DD
www.contoso.com/abzzzwww.contoso.com/abzzz BB
www.contoso.com/abc/www.contoso.com/abc/ EE
www.contoso.com/abc/dwww.contoso.com/abc/d FF
www.contoso.com/abc/defwww.contoso.com/abc/def GG
www.contoso.com/abc/defzzzwww.contoso.com/abc/defzzz FF
www.contoso.com/abc/def/ghiwww.contoso.com/abc/def/ghi FF
www.contoso.com/pathwww.contoso.com/path BB
www.contoso.com/path/www.contoso.com/path/ HH
www.contoso.com/path/zzzwww.contoso.com/path/zzz BB

Advertencia


Si no hay ninguna regla de enrutamiento para un host de front-end con coincidencia exacta con una ruta de acceso de ruta comodín (/*), entonces no será una coincidencia con una regla de enrutamiento.If there are no routing rules for an exact-match frontend host with a catch-all route Path (/*), then there will not be a match to any routing rule.

Configuración de ejemplo:Example configuration:

EnrutarRoute HostHost PathPath
UnA profile.contoso.comprofile.contoso.com /api/*/api/*

Tabla de búsqueda de coincidencias:Matching table:

Solicitud entranteIncoming request Ruta coincidenteMatched Route
profile.domain.com/otherprofile.domain.com/other Ninguno.None. Error 400: Bad RequestError 400: Bad Request

Decisión de enrutamientoRouting decision

Una vez que nos hemos buscado la coincidencia con una única regla de enrutamiento de Front Door, se debe elegir cómo procesar la solicitud.Once we've matched to a single Front Door routing rule, we then need to choose how to process the request. Si, para la regla de enrutamiento coincidente, Front Door tiene disponible una respuesta almacenada en caché; la misma se envía de vuelta al cliente.If for the matched routing rule, Front Door has a cached response available then the same gets served back to the client. En caso contrario, lo que se evalúa es si ha configurado la reescritura de direcciones URL (ruta de reenvío personalizado) para la regla de enrutamiento coincidente, o no.Otherwise, the next thing that gets evaluated is whether you have configured URL Rewrite (custom forwarding path) for the matched routing rule or not. Si no hay definida una ruta de acceso de reenvío personalizado, se reenvía la solicitud al back-end adecuado en el grupo de back-end configurado tal cual.If there isn't a custom forwarding path defined, then the request gets forwarded to the appropriate backend in the configured backend pool as is. En caso contrario, se actualiza la ruta de acceso de solicitud como para la ruta de acceso de reenvío personalizada definida y, a continuación, se reenvía al back-end.Else, the request path is updated as per the custom forwarding path defined and then forward to the backend.

Pasos siguientesNext steps