Eu estava lendo um tópico do Hacker News em que um usuário publica um link a partir de 2011, explicando que o IIS é muito mais rápido que a maioria dos outros servidores da Web (* nix). Outro usuário responde, explicando que o IIS obtém essa vantagem ao ter um módulo de kernel chamado HTTP.sys . Que eu saiba, a maioria dos outros servidores da web populares em 2015 não faz isso.
Eu nunca gostaria de escrever um servidor Web no modo kernel, porque nunca poderia confiar em mim mesmo para libertá-lo de explorações de segurança (o que seria menos sério quando executado em um anel de proteção mais baixo).
Do ponto de vista do engenheiro de software (em oposição a um cliente para servidores da Web), executar no modo kernel é uma decisão inteligente de desempenho? As preocupações com segurança podem ser atenuadas no desenvolvimento de aplicativos a ponto de tornar um servidor no modo kernel um lucro líquido para o consumidor?
fonte
Respostas:
Http.sys não é tanto um servidor web como um encaminhador de proxy. Ele foi projetado para permitir que muitos servidores da Web coexistam em uma caixa do Windows, para que você possa ter o IIS executando um site, mas também vários serviços WCF executando com interfaces http / REST ou SOAP, tudo na porta padrão 80. (é por isso que você Não é possível executar o Apache no Windows sem tremer, o Apache não foi modificado para funcionar com este sistema de registro, é uma pena que não tenha sido mais transparente para os aplicativos e requer algumas modificações bastante complexas para se conectar a ele).
A maneira como funciona é que você registra uma URL nela e no aplicativo correspondente, e quando uma solicitação http é feita na porta 80, o http.sys a aceita, mas depois passa a solicitação para o aplicativo registrado para lidar com o destino dessa URL.
Duvido que um servidor da web no modo kernel faça algum sentido - mesmo que o desempenho do soquete possa ser melhorado dessa maneira, para executar qualquer trabalho útil, a lógica do aplicativo ainda será executada no espaço do usuário, portanto sempre haverá uma transição - você ' apenas o mudei um pouco ao longo da pilha de chamadas.
fonte
O Http.sys não é o único servidor Web em modo kernel disponível: no Linux, também existe o tux . Como você identificou corretamente, a segurança é uma preocupação com esses tipos de servidores, o que levou o tux a não ser incluído no kernel linux da linha principal (e acredito que não seja atualizado para versões mais recentes do kernel).
Uma solução melhor seria o uso de um sistema operacional que não depende da proteção de hardware para reforçar a segurança do processo, por exemplo, a singularidade da Microsoft: esse sistema permitiria ganhos de eficiência de um servidor no modo kernel sem os riscos à segurança. Infelizmente, nenhum sistema operacional pronto para produção com base nesse princípio está disponível a partir de 2015 e o AFAIK também não está trabalhando seriamente em um deles (o projeto Singularity foi cancelado).
fonte
O Http.sys é de baixo risco, pois não pode executar nenhuma cópia fornecida por terceiros.
O HTTP.sys faz algumas tarefas.
Ele atua como um encaminhador de proxy, permitindo que vários processos respondam à solicitação de diferentes partes do espaço de nome HTTP. A resposta gbjbaanb cobre isso bem.
Serve arquivos estáticos, diretamente do cache de arquivos do Windows. Isso fornece uma grande aceleração para arquivos estáticos de arquivos pequenos, pois não há opções de contexto.
Ele armazenará em cache a saída de qualquer aplicativo para o qual encaminhar uma solicitação HTTP e retornará o resultado descontado. O aplicativo está no controle completo sobre quanto tempo (se houver) o cache dura.
O Http.sys foi projetado para executar tarefas simples MUITO rápido, passando todo o resto para um processo no espaço do usuário.
Em resposta ao comentário
O problema é que você deve confiar na Microsoft para escrever código complexo do kernel para fazer essa pergunta; caso contrário, você decide não usar o Windows para hospedagem na Web . O Http.sys aumenta muito pouco o risco de erros do kernel, dado o quão complexo é o kernel.
Se algo Http.sys reduz o risco, uma vez que existe uma separação tão clara abaixo do código da aplicação e serviço da web de "baixo nível".
Em uma configuração bem projetada, a máquina (ou servidor virtual) que executa o servidor da Web tem acesso muito limitado ao restante da rede, pois é um destino de alto risco. Isso torna muito pouco diferente se o kernel ou um servidor da web no modo de usuário for hackeado, pois o servidor não deve ter mais “direitos” na rede, o processo no modo de usuário do servidor da web precisará fazer seu trabalho.
fonte