Я читал ветку Hacker News, где один пользователь публикует ссылку с 2011 года, объясняющую, что IIS намного быстрее, чем большинство других (* nix) веб-серверов. Другой пользователь отвечает, объясняя, что IIS получает это преимущество, имея модуль ядра с именем HTTP.sys . Насколько мне известно, большинство других популярных веб-серверов в 2015 году этого не делают.
Я бы никогда не захотел написать веб-сервер в режиме ядра, потому что я никогда не мог бы доверять себе, чтобы он был свободен от эксплойтов безопасности (что было бы менее серьезно при работе с более низким кольцом защиты).
С точки зрения разработчика программного обеспечения (в отличие от клиента для веб-серверов), работает ли в режиме ядра интеллектуальное решение по производительности? Можно ли смягчить проблемы безопасности при разработке приложений, чтобы сделать сервер режима ядра чистой прибылью для потребителя?
источник
Ответы:
Http.sys - это не столько веб-сервер, сколько прокси-сервер пересылки. Он разработан для того, чтобы позволить многим веб-серверам сосуществовать в Windows, поэтому у вас может быть IIS, работающий с веб-сайтом, а также несколько служб WCF, работающих с интерфейсами http / REST или SOAP, все на стандартном порте 80 (вот почему вы не может запустить Apache в Windows без каких-либо проблем, Apache не был изменен для работы с этой системой регистрации, к сожалению, он не стал более прозрачным для приложений и требует некоторых довольно сложных изменений, чтобы подключиться к нему).
Это работает так, что вы регистрируете URL-адрес с ним и соответствующим приложением, и, когда на порт 80 делается запрос http, http.sys принимает его, но затем передает запрос любому приложению, зарегистрированному для обработки этого целевого URL-адреса.
Я сомневаюсь, что веб-сервер в режиме ядра имеет какой-то смысл - даже если производительность сокетов может быть улучшена таким образом, для выполнения какой-либо полезной работы логика приложения по-прежнему будет выполняться в пространстве пользователя, поэтому всегда есть переход - вы Мы просто переместили его вдоль стека вызовов.
источник
Http.sys - не единственный доступный веб-сервер в режиме ядра: под Linux также есть смокинг . Как вы правильно определили, безопасность - это проблема серверов такого типа, что привело к тому, что tux не был включен в основное ядро linux (и я считаю, что не обновляется для более поздних версий ядра).
Лучшим решением было бы использование операционной системы, которая не использует аппаратную защиту для обеспечения безопасности процесса, например, особенность Microsoft: такая система позволила бы повысить эффективность работы сервера в режиме ядра без риска для безопасности. К сожалению, по состоянию на 2015 год не было готовых к использованию операционных систем, основанных на этом принципе, и AFAIK также никто серьезно не работает над ним (проект Singularity был отменен).
источник
Http.sys имеет низкий риск, так как он не может работать с любой сторонней организацией.
Http.sys выполняет несколько задач.
Он действует как прокси-сервер пересылки, поэтому позволяет нескольким процессам отвечать на запросы к различным частям пространства имен HTTP. Ответ gbjbaanb охватывает это хорошо.
Он обслуживает статические файлы прямо из кэша файлов Windows. Это обеспечивает большую скорость для небольших файлов статических файлов, так как нет переключателей контекста.
Он будет кэшировать выходные данные любого приложения, к которому он направляет HTTP-запрос, и возвращает обналиченный результат. Приложение полностью контролирует, как долго (если есть) кеширование длится.
Http.sys предназначен для выполнения простых задач ОЧЕНЬ быстро, передавая все остальное процессу в пространстве пользователя.
В ответ на комментарий
Проблема заключается в том, что вы должны доверять Microsoft для написания сложного кода ядра, чтобы задавать этот вопрос, иначе вы решите вообще не использовать Windows для веб-хостинга . Http.sys очень мало увеличивает риск ошибок в ядре, учитывая насколько сложное ядро в любом случае.
Во всяком случае, Http.sys снижает риск, поскольку существует такое четкое разделение ниже «низкого уровня» веб-обслуживания и кода приложения.
В правильно спроектированной установке компьютер (или виртуальный сервер), на котором работает веб-сервер, имеет очень ограниченный доступ к остальной части сети, поскольку это является целью высокого риска. Если ядро или веб-сервер пользовательского режима взломаны, то это мало что меняет, поскольку у сервера больше не должно быть «прав» в сети, тогда процесс пользовательского режима веб-сервера должен выполнять свою работу.
источник