Простой общий интерфейс шлюза

редактировать

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

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

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

Содержание

  • 1 История
  • 2 Спецификация
    • 2.1 Формат запроса
    • 2.2 Пример
  • 3 Веб-серверы, реализующие SCGI
  • 4 Языковые привязки для SCGI API
  • 5 См. Также
  • 6 Примечания
  • 7 Ссылки
  • 8 Внешние ссылки

История

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

Спецификация

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

Формат запроса

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

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

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

Повторяющиеся имена не допускаются в заголовках запроса; RFC2616 -совместимое объединение заголовков должно быть уже выполнено. Первый заголовок запроса должен иметь имя «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 OK» <0d 0a>«Content-Type: text / plain» <0d 0a>«» <0d 0a>"42"

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

Веб-серверы, реализующие SCGI

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

Языковые привязки для SCGI API

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

См. также

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

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

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

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

Примечания

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

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-08 02:04:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте