Из Википедии, бесплатной энциклопедии
  (Перенаправлено из SCGI )
Перейти к навигации Перейти к поиску

Simple Common Gateway Interface ( SCGI ) представляет собой протокол для приложений для взаимодействия с HTTP серверами, в качестве альтернативы CGI протоколу. Он похож на FastCGI, но разработан для упрощения синтаксического анализа. В отличие от CGI, он позволяет длительному процессу обслуживания продолжать обслуживать запросы, тем самым избегая задержек в ответе на запросы из-за накладных расходов на настройку (например, при подключении к базе данных).

SCGI - это протокол, который определяет связь между веб-сервером и сервером приложений. Это контрастирует с CGI, который представляет собой более ранний интерфейс приложения (шлюза), разработанный, чтобы позволить программисту приложений избежать сложности сокетов и длительных процессов обслуживания, когда приемлемы низкая масштабируемость и высокие накладные расходы.

Протокол SCGI использует тот факт, что веб-сервер уже проанализировал и проверил HTTP-запрос и канонически передает запрос на сервер SCGI, позволяя программисту приложения избежать синтаксического анализа неоднозначностей и пограничных случаев протокола. Это позволяет избежать сложных правил синтаксического анализа и объединения заголовков из RFC 2616, что значительно снижает сложность процесса сервера SCGI.

История [ править ]

Нил Шеменауэр опубликовал оригинальную спецификацию протокола SCGI, датированную октябрем 2001 года. [1] Он разработал первые реализации SCGI и первоначально опубликовал их в апреле 2002 года. [2]

Спецификация [ править ]

Клиент подключается к серверу SCGI по надежному потоковому протоколу, позволяющему передавать 8-битные байты. Клиент начинает с отправки запроса. Когда сервер SCGI видит конец запроса, он отправляет ответ и закрывает соединение. Формат ответа специально не указан в этом протоколе, хотя обычно используются ответы HTTP, эквивалентные CGI. [примечание 1]

Формат запроса [ изменить ]

Запрос SCGI является конкатенацией из netstring закодированы заголовков и тела. Ответ SCGI - это обычный HTTP-ответ.

Каждый заголовок состоит из пары имя-значение , где имя и значение представляют собой строки с завершающим нулем ( строки C ). Значение может быть пустой строкой , и в этом случае завершающий нуль все равно остается. Ни имя, ни значение не могут содержать никаких встроенных нулевых байтов . Эти соображения являются стандартными для строк C, но часто сбивают с толку программистов, привыкших к другим стандартам обработки строк.

Все предоставленные заголовки объединяются в одну байтовую последовательность, затем кодируются netstring. Затем добавляется необработанное тело, если оно есть.

В заголовках запроса не допускаются повторяющиеся имена; RFC 2616-совместимое объединение заголовков [примечание 2] должно было уже иметь место. Первый заголовок запроса должен иметь имя «CONTENT_LENGTH» и значение, которое представляет собой длину тела в десятичном формате. Заголовок запроса «CONTENT_LENGTH» должен присутствовать всегда, даже если его значение равно «0». Также всегда должен быть заголовок запроса с именем «SCGI» и значением «1». Стандартные переменные среды CGI должны быть предоставлены в заголовках SCGI для совместимости при преобразовании старых программ CGI в SCGI. Тело (если есть), предоставленное в запросе, следует за заголовками; его длина определяется заголовком запроса «CONTENT_LENGTH».

Хотя протокол SCGI изолирует сервисного программиста от некоторых соображений HTTP, различных деталей (таких как интерпретация октетов тела сообщения в соответствии с заголовком Transfer-Encoding, CONTENT_LENGTH - это количество октетов после того, как тело было закодировано для передачи, и т. Д. .) по-прежнему требуют знания спецификации протокола HTTP.

Пример [ править ]

Веб-сервер (клиент SCGI) открывает соединение и отправляет конкатенацию следующих строк процессу службы (серверу SCGI):

 "70:" «CONTENT_LENGTH» <00> «27» <00> "SCGI" <00> "1" <00> «REQUEST_METHOD» <00> «POST» <00> "REQUEST_URI" <00> "/ глубокая мысль" <00> "," "Каков ответ на жизнь?"

Сервер SCGI отправляет веб-серверу следующий ответ:

 «Статус: 200 ОК» <0d 0a> "Content-Type: text / plain" <0d 0a> "" <0d 0a> «42»

Сервер SCGI закрывает соединение.

Веб-серверы, реализующие SCGI [ править ]

(этот список не полный)

Привязки языков для SCGI API [ править ]

SCGI может быть реализован на любом языке, который поддерживает сетевые сокеты и сетевые строки . Ниже приведен неполный список языков с известными привязками SCGI:

  • Кобра
  • D с библиотекой arsd.cgi
  • Haskell
  • Java , с коннектором SCGI или с библиотекой [1]
  • Лисп
  • Perl с пакетом SCGI или фреймворком Plack
  • PHP
  • Python
  • Ракетка с библиотекой scgi
  • Рубин
  • Ржавчина , с Tokio-SCGI обрешетке
  • Схема
  • Tcl
  • Ним

См. Также [ править ]

Протоколы приложений / Gatway:

  • Общий интерфейс шлюза (CGI) - запускает дочерний процесс по запросу
  • FastCGI - попытки повысить масштабируемость за счет поддержки длительных процессов, подобных CGI.
  • Протокол Apache JServ - двоичный протокол, предназначенный для прокси-запросов между веб-сервером и сервером приложений.

Хосты приложений (в зависимости от языка):

  • Стойка - интерфейс веб-сервера Ruby
  • PSGI - интерфейс шлюза веб-сервера Perl
  • WSGI - интерфейс шлюза веб-сервера Python
  • JSGI - интерфейс шлюза веб-сервера JavaScript

Заметки [ править ]

1. ^ Документ спецификации был размещен в открытом доступе Нилом Шеменауэром 12 января 2006 г.
2. ^ Информацию об объединении заголовков HTTP см. В разделе 4.2 RFC2616 .

Ссылки [ править ]

  1. ^ Schemenauer, Нил (30 октября 2001). «SCGI: простой альтернативный интерфейс общего шлюза» . Архивировано из оригинала на 2002-04-03. CS1 maint: обескураженный параметр ( ссылка )
  2. ^ "scgi-0.1.tar.gz" . Индекс / программное обеспечение / файлы / scgi. MNX: MEMS и обмен нанотехнологиями . 12 апреля, 2002. Архивировано из оригинала на 2002-10-20. CS1 maint: обескураженный параметр ( ссылка )

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • Спецификация протокола SCGI