Dela via


Routning av inkommande begäranden

HTTP Server-API:et underhåller en routningsdatabas för att avgöra vilket program som tar emot en inkommande begäran. Routningstabellen skapas från reservationsdatabasen och innehåller reservationsposter samt aktuella registreringar. När en registrering eller reservation görs placeras den i routningsdatabasens bucket som motsvarar värdtypen enligt följande:

  • + : portregistreringar placeras i bucketen "Strong Wildcard"

  • värd : portregistreringar placeras i bucketen "Explicit"

  • IP: portregistreringar placeras i bucketen "IP-bundet svagt jokertecken"

  • * : Portregistreringar placeras i bucketen "Svag jokertecken"

De här stegen refererar också till den ordning inkommande HTTP-begäranden bearbetas. De starka jokerteckenreservationerna först, sedan kontrolleras den explicita reservationen följt av det IP-bundna svaga jokertecknet och det svaga jokertecknet. Sökningen stoppas när en matchning hittas så att registreringar i någon av de återstående bucketarna inte hittas.

Algoritmen för HTTP Server API-routning hittar den bästa matchningen för UrlPrefix- genom att söka i både registreringsposterna och reservationsposterna i routningsdatabasen, med början med den starka jokerteckens bucketen och slutar med den svaga bucketen med jokertecken. Den bästa matchningen inom en bucket är den längsta matchningen i den relativa URI-delen av UrlPrefix (förutsatt en exakt matchning för värden, porten och schemadelarna i URL:en). När en matchning hittas i en bucket stoppar routningsalgoritmen sökningen och hoppar över alla bucketar med lägre prioritet.

Tänk till exempel på följande registreringar (listade i fallande prioritetsordning baserat på buckettyper:

  • Registrering: https://+:80/vroot/ registreras av program 1

  • Registrering: https://adatum.com:80/ registreras av program 2

  • Registrering: https://\*:80/ registreras av program 3

En inkommande begäran om https://adatum.com:80/vroot/subdir/file.htm/ levereras till program 1. En inkommande begäran om https://adatum.com:80/default.htm/ levereras till program 2. En inkommande begäran om https://otheradatum.com:80/file.htm/ levereras till program 3.

Om den bästa matchningen är en reservationspost innebär det att programmet som ska ta emot begäran inte körs. Tänk till exempel på följande registrering och reservation:

  • Registrering: https://\*:80/vroot/ registreras av program 1, användare A

  • Reservation: https://adatum.com:80/ har reserverats för användare B

En inkommande begäran om https://adatum.com:80/vroot/file.htm/ levereras inte till program 1 eftersom den bästa matchningen leder till reservationsposten för användare B. Prioritetsreglerna tillämpas i det här fallet på reservationen som har högre prioritet. Om ingen process är aktiv som har auktoriserats och registrerats för tjänstbegäranden för den mottagna URL:en avvisas begäran med statuskoden 400 (felaktig begäran).