Эта статья включает список общих ссылок , но в ней отсутствуют соответствующие встроенные цитаты . ( Июнь 2010 ) |
FastCGI — это двоичный протокол для взаимодействия интерактивных программ с веб-сервером . Это разновидность более раннего Common Gateway Interface (CGI). Основная цель FastCGI — сократить накладные расходы, связанные с взаимодействием между веб-сервером и программами CGI, позволяя серверу обрабатывать больше запросов веб-страниц за единицу времени.
Common Gateway Interface (CGI) — это спецификация интерфейса, позволяющая внешним приложениям взаимодействовать с веб-серверами. Приложения CGI работают в отдельных процессах , которые создаются в начале каждого запроса и завершаются в конце. Эта модель «один новый процесс на запрос» делает программы CGI очень простыми в реализации, но ограничивает эффективность и масштабируемость. При высоких нагрузках накладные расходы операционной системы на создание и уничтожение процессов становятся значительными. Кроме того, модель процесса CGI ограничивает методы повторного использования ресурсов, такие как повторное использование подключений к базам данных, кэширование в памяти и т. д.
Для устранения недостатков масштабируемости CGI компания Open Market разработала FastCGI и впервые представила его в своем продукте веб-сервера в середине 1990-х годов. Первоначально компания Open Market разработала FastCGI отчасти как конкурентный ответ на фирменные интерфейсы прикладного программирования (API) Netscape ( Netscape Server Application Programming Interface (NSAPI)) для разработки веб-приложений.
FastCGI, впервые разработанный Open Market, затем был реализован несколькими другими производителями веб-серверов. Однако его подход конкурировал с другими методами для ускорения и упрощения связи между сервером и подпрограммой. Модули Apache HTTP Server, такие как mod_perl и mod_php, появились примерно в то же время и быстро завоевали популярность. По состоянию на 2020 год [обновлять]все эти различные методы, включая CGI, остаются широко используемыми.
Вместо создания нового процесса для каждого запроса FastCGI использует постоянные процессы для обработки серии запросов. Эти процессы принадлежат серверу FastCGI, а не веб-серверу. [1]
Для обслуживания входящего запроса веб-сервер отправляет информацию о переменных окружения и запрос страницы в процесс FastCGI через сокет домена Unix , именованный канал или соединение протокола управления передачей (TCP). Ответы возвращаются из процесса на веб-сервер по тому же соединению, а затем веб-сервер доставляет этот ответ конечному пользователю . Соединение может быть закрыто в конце ответа, но как веб-сервер, так и процессы службы FastCGI сохраняются. [2]
Каждый отдельный процесс FastCGI может обрабатывать множество запросов в течение своего жизненного цикла, тем самым избегая накладных расходов на создание и завершение процесса по запросу. Обработка нескольких запросов одновременно может осуществляться несколькими способами: с использованием одного соединения с внутренним мультиплексированием (т. е. несколько запросов по одному соединению); с использованием нескольких соединений; или с помощью сочетания этих методов. Можно настроить несколько серверов FastCGI, что повышает стабильность и масштабируемость.
Администраторы и программисты веб-сайтов могут обнаружить, что разделение веб-приложений и веб-сервера в FastCGI имеет много преимуществ по сравнению со встроенными интерпретаторами ( mod_perl , mod_php и т. д.). Такое разделение позволяет перезапускать процессы сервера и приложений независимо друг от друга — важное соображение для загруженных веб-сайтов. Оно также позволяет реализовывать политики безопасности хостинга для каждого приложения, что является важным требованием для интернет-провайдеров и компаний веб-хостинга. [3] Различные типы входящих запросов могут быть распределены по определенным серверам FastCGI, которые были оборудованы для эффективной обработки этих типов запросов.
FastCGI может быть реализован на любом языке, поддерживающем сетевые сокеты . Поскольку «FastCGI — это протокол, а не реализация», он не привязан жестко ни к одному языку. Существуют интерфейсы прикладного программирования (API) для: [18]
Современные фреймворки, такие как Ruby on Rails , Catalyst , Django , Kepler и Plack, позволяют использовать как встроенные интерпретаторы ( например , mod_ruby , mod_perl , mod_python или mod_lua), так и FastCGI.