SCGI
SCGI (англ. Simple Common Gateway Interface — Спрощений Загальний Інтерфейс Шлюзу) — стандарт зв'язку між веб-сервером і програмою — генератором контенту. Стандарт є спрощеною версією стандарту FastCGI. На відміну від FastCGI, специфікація SCGI займає кілька сторінок.
Специфікація
Спершу веб-сервер встановлює зв'язок із програмою, генератором контенту, використовуючи надійний потоковий протокол, що підтримує передачу 8-бітних байтів. Заголовки поділені нульовими байтами. Першим заголовком обов'язково має бути заголовок «CONTENT_LENGTH»(англ. ДОВЖИНА_ЗМІСТУ), що означає довжину тіла запиту. Цей заголовок має бути присутнім навіть якщо його значення дорівнює нулю. Також обов'язковий заголовок «SCGI», значення якого має бути «1», для підтвердження того, що цей запит — SCGI запит. Позиція цього заголовка, на відміну від «CONTENT_LENGTH», не зазначається. Після заголовку йде тіло запиту, яке зазвичай є тілом НТТР запита, надісланого до веб-сервера. Після отримання й обробки інформації, програма повинна відіслати відповідь, однак її структура не зазначається, але зазвичай вона є такою ж, як і в CGI та FastCGI. Коли відповідь повністю надіслано, програма має обірвати з'єднання.
Приклад
SCGI клієнт під'єднується до SCGI сервера і надсилає запит:
"70:" "CONTENT_LENGTH" <00> "27" <00> "SCGI" <00> "1" <00> "REQUEST_METHOD" <00> "POST" <00> "REQUEST_URI" <00> "/deepthought" <00> "," "У чому сенс життя?"
SCGI сервер обробляє отриману інформацію та відсилає відповідь:
"Status: 200 OK" <0d 0a> "Content-Type: text/plain" <0d 0a> "" <0d 0a> "42"
SCGI сервер обриває з'єднання.
Вебсервери, що підтримують SCGI
Протокол підтримується усіма провідними веб-серверами, зокрема:
- Lighttpd — використовуючи mod_scgi, який є розширенням для підтримки FastCGI — mod_fcgi, зі зміненою частиною, що відповідає за протокол. Конфігуруються обидва розширення однаково. Це означає, що скоріше за все розподіл навантаження lighttpd для FastCGI працює також для SCGI.
- nginx
- Apache
- Microsoft Internet Information Services — використовуючи ISAPI розширення.
Мови програмування, що підтримують SCGI
Можливо зробити бібліотеку SCGI для майже будь-якої мови програмування, чому сприяє простота протоколу. Більшість мов мають бібліотеки.
Посилання
Оригінальна специфікація(англ.)