Jump to content

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

(Перенаправлено с SCGI )

Простой общий интерфейс шлюза ( 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 представляет собой объединение заголовков , закодированных в сетевой строке , и тела. Ответ SCGI — это обычный ответ HTTP.

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

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

Повторяющиеся имена в заголовках запроса не допускаются; Объединение заголовков в соответствии с 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> "/deepthought" <00>
       ","
       "What is the answer to life?"

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

       "Status: 200 OK" <0d 0a>
       "Content-Type: text/plain" <0d 0a>
       "" <0d 0a>
       "42"

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

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

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

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

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

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

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

См. также

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

Протоколы приложений/шлюзов:

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

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

Примечания

[ редактировать ]
1. ^ Документ спецификации был размещен в открытом доступе Нилом Шеменауэром 12 января 2006 года.
2. ^ Для объединения заголовков HTTP см. раздел 4.2 RFC2616 .
  1. ^ Шеменауэр, Нил (30 октября 2001 г.). «SCGI: альтернатива простому общему интерфейсу шлюза» . Архивировано из оригинала 3 апреля 2002 г.
  2. ^ "scgi-0.1.tar.gz" . Индекс /software/files/scgi. MNX: Биржа МЭМС и нанотехнологий . 12 апреля 2002 г. Архивировано из оригинала 20 октября 2002 г.
  3. ^ «Althttpd: Веб-сервер Althttpd» . sqlite.org . Проверено 19 мая 2023 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2efb90713c124f81dd857a982b9d0a35__1723237080
URL1:https://arc.ask3.ru/arc/aa/2e/35/2efb90713c124f81dd857a982b9d0a35.html
Заголовок, (Title) документа по адресу, URL1:
Simple Common Gateway Interface - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)