Modalità di corrispondenza delle richieste con una regola di routingHow requests are matched to a routing rule

Dopo aver stabilito una connessione e completato un handshake TLS, quando una richiesta si trova in un ambiente di sportello anteriore, una delle prime cose che la porta anteriore è determinare quale regola di routing particolare deve corrispondere alla richiesta e quindi eseguire l'azione definita nella configurazione.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. Il documento seguente illustra in che modo Frontdoor determina la configurazione di routing da usare durante l'elaborazione di una richiesta HTTP.The following document explains how Front Door determines which Route configuration to use when processing an HTTP request.

Struttura di una configurazione di routing di FrontdoorStructure of a Front Door route configuration

Una configurazione di una regola di routing di Frontdoor è costituita da due parti principali: un "lato sinistro" e un "lato destro".A Front Door routing rule configuration is composed of two major parts: a "left-hand side" and a "right-hand side". Viene verificata la corrispondenza della richiesta in ingresso con il lato sinistro della route, mentre il lato destro definisce la modalità di elaborazione della richiesta.We match the incoming request to the left-hand side of the route while the right-hand side defines how we process the request.

Corrispondenza in ingresso (lato sinistro)Incoming match (left-hand side)

Le seguenti proprietà determinano se la richiesta in ingresso corrisponde alla regola di routing (o lato sinistro):The following properties determine whether the incoming request matches the routing rule (or left-hand side):

  • Protocolli HTTP (HTTP/HTTPS)HTTP Protocols (HTTP/HTTPS)
  • Host (ad esempio, www . foo.com, * . bar.com)Hosts (for example, www.foo.com, *.bar.com)
  • Percorsi (ad esempio, /*, /users/*, /file.gif)Paths (for example, /*, /users/*, /file.gif)

Queste proprietà vengono espanse internamente, pertanto ogni combinazione di protocollo/host/percorso è un set di corrispondenze possibili.These properties are expanded out internally so that every combination of Protocol/Host/Path is a potential match set.

Dati della route (lato destro)Route data (right-hand side)

La decisione su come elaborare la richiesta dipende dal fatto che la memorizzazione nella cache sia abilitata o meno per la specifica route.The decision of how to process the request, depends on whether caching is enabled or not for the specific route. Pertanto, se non è disponibile una risposta memorizzata nella cache per la richiesta, la richiesta sarà inoltrata al back-end appropriato nel pool back-end configurato.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.

Corrispondenza delle routeRoute matching

Questa sezione descrive la modalità di individuazione della corrispondenza per una determinata regola di routing in Frontdoor.This section will focus on how we match to a given Front Door routing rule. Il concetto di base è che viene sempre verificata prima la corrispondenza più specifica esaminando solo il "lato sinistro".The basic concept is that we always match to the most-specific match first looking only at the "left-hand side". Viene prima verificata la corrispondenza in base al protocollo HTTP, quindi in base all'host front-end e infine in base al percorso.We first match based on HTTP protocol, then Frontend host, then the Path.

Corrispondenza di host front-endFrontend host matching

Quando si abbinano host front-end, viene usata la logica definita di seguito:When matching Frontend hosts, we use the logic defined below:

  1. Cercare eventuali routing con una corrispondenza esatta per l'host.Look for any routing with an exact match on the host.
  2. Se nessun host front-end corrisponde in modo esatto, rifiutare la richiesta e inviare un errore 400 - Richiesta non valida.If no exact frontend hosts match, reject the request and send a 400 Bad Request error.

Per spiegare ulteriormente questo processo, esaminiamo una configurazione di esempio delle route di Frontdoor (solo lato sinistro):To explain this process further, let's look at an example configuration of Front Door routes (left-hand side only):

Regola di routingRouting rule Host front-endFrontend hosts PercorsoPath
AA 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/*

Se venissero inviate a Frontdoor, le richieste in ingresso seguenti corrisponderebbero alle regole di routing indicate di seguito dall'esempio precedente:If the following incoming requests were sent to Front Door, they would match against the following routing rules from above:

Host front-end in ingressoIncoming frontend host Regole di routing corrispondentiMatched routing rule(s)
foo.contoso.comfoo.contoso.com A, BA, B
.Fabrikam.com wwwwww.fabrikam.com CC
images.fabrikam.comimages.fabrikam.com Errore 400 - Richiesta non validaError 400: Bad Request
foo.adventure-works.comfoo.adventure-works.com CC
contoso.comcontoso.com Errore 400 - Richiesta non validaError 400: Bad Request
.Adventure-Works.com wwwwww.adventure-works.com Errore 400 - Richiesta non validaError 400: Bad Request
.northwindtraders.com wwwwww.northwindtraders.com Errore 400 - Richiesta non validaError 400: Bad Request

Corrispondenza del percorsoPath matching

Dopo aver determinato lo specifico host front-end e filtrato le possibili regole di routing solo alle route con tale host front-end, Frontdoor filtra le regole di routing in base al percorso della richiesta.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. Usiamo una logica simile a quella per gli host front-end:We use a similar logic as frontend hosts:

  1. Cercare eventuali regole di routing con una corrispondenza esatta per il percorsoLook for any routing rule with an exact match on the Path
  2. Se nessun percorso corrisponde in modo esatto, cercare le regole di routing con un percorso con caratteri jolly corrispondenteIf no exact match Paths, look for routing rules with a wildcard Path that matches
  3. Se non viene trovata alcuna regola di routing con un percorso corrispondente, rifiutare la richiesta e restituire una risposta HTTP di errore 400 - Richiesta non valida.If no routing rules are found with a matching Path, then reject the request and return a 400: Bad Request error HTTP response.

Nota

Eventuali percorsi senza caratteri jolly vengono considerati percorsi di corrispondenza esatta.Any Paths without a wildcard are considered to be exact-match Paths. Anche se il percorso termina con una barra, viene comunque considerato una corrispondenza esatta.Even if the Path ends in a slash, it's still considered exact match.

Per chiarire ulteriormente il processo, esaminiamo un altro set di esempi:To explain further, let's look at another set of examples:

Regola di routingRouting rule Host front-endFrontend host PercorsoPath
AA 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/

Tale configurazione produrrà la tabella corrispondente di esempio seguente :Given that configuration, the following example matching table would result:

Richiesta in ingressoIncoming Request Route corrispondenteMatched Route
.contoso.com/wwwwww.contoso.com/ AA
.contoso.com/a wwwwww.contoso.com/a BB
.contoso.com/AB wwwwww.contoso.com/ab CC
.contoso.com/ABC wwwwww.contoso.com/abc DD
.contoso.com/abzzz wwwwww.contoso.com/abzzz BB
.contoso.com/ABC/wwwwww.contoso.com/abc/ EE
.contoso.com/ABC/d wwwwww.contoso.com/abc/d FF
.contoso.com/ABC/def wwwwww.contoso.com/abc/def GG
.contoso.com/ABC/defzzz wwwwww.contoso.com/abc/defzzz FF
.contoso.com/ABC/def/ghi wwwwww.contoso.com/abc/def/ghi FF
.contoso.com/path wwwwww.contoso.com/path BB
.contoso.com/path/wwwwww.contoso.com/path/ HH
.contoso.com/path/zzz wwwwww.contoso.com/path/zzz BB

Avviso


Se non sono presenti regole di routing per un host front-end con corrispondenza esatta con un percorso di route catch-all (/*), non vi sarà alcuna corrispondenza con alcuna regola di routing.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.

Configurazione di esempio:Example configuration:

RouteRoute HostHost PercorsoPath
AA profile.contoso.comprofile.contoso.com /api/*/api/*

Tabella corrispondente:Matching table:

Richiesta in ingressoIncoming request Route corrispondenteMatched Route
profile.domain.com/otherprofile.domain.com/other Nessuna.None. Errore 400 - Richiesta non validaError 400: Bad Request

Decisione di routingRouting decision

Dopo aver individuato la corrispondenza con una singola regola di routing di Frontdoor, è necessario scegliere la modalità di elaborazione della richiesta.Once we've matched to a single Front Door routing rule, we then need to choose how to process the request. Se per la regola di routing corrispondente Frontdoor dispone di una risposta memorizzata nella cache, questa viene restituita al client.If for the matched routing rule, Front Door has a cached response available then the same gets served back to the client. In caso contrario, l'elemento successivo che viene valutato è se è stata configurata o meno la riscrittura URL (percorso di inoltro personalizzato) per la regola di routing corrispondente.Otherwise, the next thing that gets evaluated is whether you have configured URL Rewrite (custom forwarding path) for the matched routing rule or not. Se non è definito un percorso di inoltro personalizzato, la richiesta viene inoltrata così com'è al back-end appropriato nel pool back-end configurato.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. In caso contrario, il percorso della richiesta viene aggiornato in base al percorso di inoltro personalizzato definito e quindi inoltrata al back-end.Else, the request path is updated as per the custom forwarding path defined and then forward to the backend.

Passaggi successiviNext steps