Solicitações de Entrada de Roteamento
A API do Servidor HTTP mantém um banco de dados de roteamento para determinar qual aplicativo recebe uma solicitação de entrada. A tabela de roteamento é criada a partir do banco de dados de reserva e contém entradas de reserva, bem como registros atuais. Quando um registro ou reserva é feito, ele é colocado no bucket de banco de dados de roteamento que corresponde ao tipo de host da seguinte maneira:
+ : os registros de porta são colocados no bucket "Caractere Curinga Forte"
host: os registros de porta são colocados no bucket "Explícito"
IP: os registros de porta são colocados no bucket "Curinga Fraco associado a IP"
* : os registros de porta são colocados no bucket "Curinga Fraco"
Essas etapas também se referem à ordem em que as solicitações HTTP de entrada são processadas. As reservas curinga fortes primeiro, em seguida, a reserva explícita são verificadas seguidas pelo curinga fraco associado a IP e curinga fraco. A pesquisa é interrompida quando uma correspondência é encontrada para que os registros em qualquer um dos buckets restantes não sejam encontrados.
O algoritmo de roteamento da API do Servidor HTTP localiza a melhor correspondência para o UrlPrefix pesquisando as entradas de registro e as entradas de reserva do banco de dados de roteamento, começando com o bucket curinga forte e terminando com o bucket curinga fraco. A melhor correspondência, dentro de um bucket, é a correspondência mais longa na parte de URI relativa do UrlPrefix (supondo uma correspondência exata para as partes de host, porta e esquema da URL). Depois que uma correspondência é encontrada em um bucket, o algoritmo de roteamento interrompe sua pesquisa e ignora todos os buckets de prioridade mais baixa.
Por exemplo, considere os seguintes registros (listados em ordem decrescente de prioridade com base nos tipos de bucket:
Registro:
https://+:80/vroot/
é registrado pelo aplicativo 1Registro:
https://adatum.com:80/
é registrado pelo aplicativo 2Registro:
https://\*:80/
é registrado pelo aplicativo 3
Uma solicitação de entrada para https://adatum.com:80/vroot/subdir/file.htm/
é entregue ao aplicativo 1. Uma solicitação de entrada para https://adatum.com:80/default.htm/
é entregue ao aplicativo 2. Uma solicitação de entrada para https://otheradatum.com:80/file.htm/
é entregue ao aplicativo 3.
Se a melhor correspondência for uma entrada de reserva, isso significa que o aplicativo que deve receber a solicitação não está em execução. Por exemplo, considere o seguinte registro e reserva:
Registro:
https://\*:80/vroot/
é registrado pelo aplicativo 1, usuário AReserva:
https://adatum.com:80/
foi reservada para o usuário B
Uma solicitação de entrada para https://adatum.com:80/vroot/file.htm/
não é entregue ao aplicativo 1 porque a melhor correspondência leva à entrada de reserva para o usuário B. As regras de precedência são aplicadas nesse caso à reserva que tem uma prioridade mais alta. Se nenhum processo estiver ativo autorizado e registrado em solicitações de serviço para a URL recebida, a solicitação será rejeitada com um código de status 400 (Solicitação Incorreta).