Articulo de referencia

Interfaz de puerta de enlace común simple

La Interfaz de Puerta de Enlace Común Simple ( SCGI ) es un protocolo que permite a las aplicaciones interactuar con servidores HTTP , como alternativa al protocolo CGI . Es sim...

La Interfaz de Puerta de Enlace Común Simple ( SCGI ) es un protocolo que permite a las aplicaciones interactuar con servidores HTTP , como alternativa al protocolo CGI . Es similar a FastCGI , pero está diseñado para facilitar su análisis. A diferencia de CGI, permite que un proceso de servicio de larga duración continúe atendiendo solicitudes, evitando así retrasos en la respuesta debido a la sobrecarga de configuración (como la conexión a una base de datos).

SCGI es un protocolo que define la comunicación entre un servidor web y un servidor de aplicaciones. Esto contrasta con CGI, una interfaz de aplicación (puerta de enlace) anterior diseñada para que el programador evite la complejidad de los sockets y los procesos de servicio de larga duración cuando se acepta una escalabilidad deficiente y una sobrecarga elevada.

El protocolo SCGI aprovecha el hecho de que el servidor web ya ha analizado y validado la solicitud HTTP, y la comunica de forma canónica al servidor SCGI, permitiendo al programador de la aplicación evitar ambigüedades de análisis y casos límite del protocolo. Esto evita las complejas reglas de análisis y combinación de encabezados de la RFC 2616 , lo que reduce significativamente la complejidad del proceso del servidor SCGI. 

Historia

Neil Schemenauer publicó la especificación original del protocolo SCGI en octubre de 2001. [ 1 ] Desarrolló las primeras implementaciones de SCGI y las publicó inicialmente en abril de 2002. [ 2 ]

Especificación

El cliente se conecta a un servidor SCGI mediante un protocolo de flujo confiable que permite la transmisión de bytes de 8 bits. El cliente comienza enviando una solicitud. Cuando el servidor SCGI recibe el final de la solicitud, envía una respuesta y cierra la conexión. El formato de la respuesta no está especificado por este protocolo, aunque generalmente se utilizan respuestas HTTP equivalentes a CGI. [nota 1]

Formato de solicitud

Una solicitud SCGI es la concatenación de encabezados codificados en netstring y un cuerpo. Una respuesta SCGI es una respuesta HTTP normal.

Cada encabezado consta de un par nombre-valor , donde tanto el nombre como el valor son cadenas terminadas en nulo ( cadenas C ). El valor puede ser una cadena vacía , en cuyo caso el carácter nulo de terminación permanece. Ni el nombre ni el valor pueden contener bytes nulos incrustados . Estas consideraciones son estándar para las cadenas C, pero suelen resultar confusas para los programadores acostumbrados a otros estándares de manejo de cadenas.

Todos los encabezados proporcionados se concatenan para formar una única secuencia de bytes, que luego se codifica en formato netstring . El cuerpo sin procesar, si lo hay, se añade posteriormente.

No se permiten nombres duplicados en los encabezados de la solicitud; la combinación de encabezados conforme a RFC 2616 [nota 2] debe haberse realizado previamente. El primer encabezado de la solicitud debe tener el nombre "CONTENT_LENGTH" y un valor que sea la longitud del cuerpo en decimal. El encabezado de solicitud "CONTENT_LENGTH" debe estar siempre presente, incluso si su valor es "0". También debe haber siempre un encabezado de solicitud con el nombre "SCGI" y un valor de "1". Las variables de entorno CGI estándar deben proporcionarse en los encabezados SCGI para garantizar la compatibilidad al convertir programas CGI antiguos a SCGI. El cuerpo (si lo hay) proporcionado en la solicitud sigue a los encabezados; su longitud se especifica mediante el encabezado de solicitud "CONTENT_LENGTH".

Si bien el protocolo SCGI aísla al programador de servicios de algunas consideraciones HTTP, varios detalles (como la interpretación de los octetos del cuerpo del mensaje según el encabezado Transfer-Encoding, que CONTENT_LENGTH sea el número de octetos después de que el cuerpo se haya codificado para su transmisión, etc.) aún requieren conocimiento de la especificación del protocolo HTTP.

Ejemplo

El servidor web (un cliente SCGI) abre una conexión y envía la concatenación de las siguientes cadenas al proceso de servicio (un servidor SCGI):

 "70:" "CONTENT_LENGTH" <00> "27" <00> "SCGI" <00> "1" <00> "MÉTODO_DE_SOLICITUD" <00> "POST" <00> "REQUEST_URI" <00> "/deepthought" <00> "," "¿Cuál es la respuesta a la vida?"

El servidor SCGI envía la siguiente respuesta al servidor web:

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

El servidor SCGI cierra la conexión.

Servidores web que implementan SCGI

(Esta lista no está completa)

Enlaces de lenguaje para la API SCGI

SCGI se puede implementar en cualquier lenguaje que admita sockets de red y cadenas de red . La siguiente es una lista parcial de lenguajes con enlaces SCGI conocidos:

Véase también

Protocolos de aplicación/pasarela:

Hosts de aplicaciones (específicos del idioma):

  • Rack - Interfaz de servidor web Ruby
  • PSGI - Interfaz de puerta de enlace del servidor web Perl
  • WSGI - Interfaz de puerta de enlace del servidor web de Python
  • JSGI – Interfaz de puerta de enlace del servidor web JavaScript

Notas

1. ^ El documento de especificaciones fue puesto en el dominio público por Neil Schemenauer el 12 de enero de 2006.
2. ^ Para la combinación de encabezados HTTP, consulte la sección 4.2 de RFC2616 .

Referencias

  1. Schemenauer, Neil (30 de octubre de 2001). "SCGI: Una alternativa sencilla a la interfaz de puerta de enlace común" . Archivado del original el 3 de abril de 2002.
  2. "scgi-0.1.tar.gz" . Índice de /software/files/scgi. MNX: MEMS and Nanotechnology Exchange . 12 de abril de 2002. Archivado del original el 20 de octubre de 2002.
  3. "Althttpd: El servidor web Althttpd" . sqlite.org . Consultado el 19 de mayo de 2023 .
  • Sitio web oficialEdita esto en Wikidata
  • Especificación del protocolo SCGI
Obtenido de " https://en.wikipedia.org/w/index.php?title=Simple_Common_Gateway_Interface&oldid=1333192449 "