Este artículo necesita citas adicionales para su verificación . ( octubre de 2017 ) |
La interfaz de puerta de enlace común simple ( SCGI ) es un protocolo para que las aplicaciones interactúen con servidores HTTP , como alternativa al protocolo CGI . Es similar a FastCGI , pero está diseñado para que sea más fácil de analizar. A diferencia de CGI, permite que un proceso de servicio de larga duración continúe atendiendo solicitudes, evitando así demoras en la respuesta a las solicitudes 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, que es una interfaz de aplicación (gateway) anterior diseñada para permitir que el programador de aplicaciones evite la complejidad de los sockets y los procesos de servicio de larga duración cuando la escalabilidad deficiente y los altos costos operativos son aceptables.
El protocolo SCGI aprovecha el hecho de que el servidor web ya ha analizado y validado la solicitud HTTP, y comunica canónicamente la solicitud al servidor SCGI, al tiempo que permite al programador de aplicaciones evitar ambigüedades de análisis y casos extremos del protocolo. Esto evita las complicadas reglas de análisis y combinación de encabezados de RFC 2616, lo que ahorra una complejidad significativa en el proceso del servidor SCGI.
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]
El cliente se conecta a un servidor SCGI a través de un protocolo de transmisión fiable que permite la transmisión de bytes de 8 bits. El cliente comienza enviando una solicitud. Cuando el servidor SCGI ve el final de la solicitud, envía una respuesta y cierra la conexión. El formato de la respuesta no está especificado específicamente por este protocolo, aunque generalmente se utilizan respuestas HTTP equivalentes a CGI. [nota 1]
Una solicitud SCGI es la concatenación de encabezados y un cuerpo codificados con netstring . 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 de C ). El valor puede ser una cadena vacía , en cuyo caso el nulo de terminación permanece. Ni el nombre ni el valor pueden contener bytes nulos incrustados . Estas consideraciones son estándar para las cadenas de C, pero a menudo resultan confusas para los programadores acostumbrados a otros estándares para el manejo de cadenas.
Todos los encabezados proporcionados se concatenan para formar una secuencia de bytes única, que luego se codifica con netstring . Luego se agrega el cuerpo original, si lo hay.
No se permiten nombres duplicados en los encabezados de solicitud; la combinación de encabezados que cumpla con RFC 2616 [nota 2] ya debe haberse realizado. El primer encabezado de solicitud debe tener el nombre "CONTENT_LENGTH" y un valor que sea la longitud del cuerpo en decimal. El encabezado de solicitud "CONTENT_LENGTH" siempre debe estar 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 se deben proporcionar en los encabezados SCGI para compatibilidad al convertir programas CGI más 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 de HTTP, varios detalles (como la interpretación de los octetos del cuerpo del mensaje según el encabezado Transfer-Encoding, el CONTENT_LENGTH siendo la cantidad de octetos después de que el cuerpo ha sido codificado para la transmisión, etc.) aún requieren el conocimiento de la especificación del protocolo HTTP.
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:" "LARGO_DEL_CONTENIDO" <00> "27" <00> "1" <00> "MÉTODO DE SOLICITUD" <00> "PUBLICACIÓN" <00> "URI_DE_SOLICITUD" <00> "/pensamiento_profundo" <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> "Tipo de contenido: texto sin formato" <0d 0a> "" <0d 0a> "42"
El servidor SCGI cierra la conexión.
(Esta lista no está completa)
SCGI se puede implementar en cualquier lenguaje que admita conectores de red y cadenas de red . La siguiente es una lista parcial de lenguajes con enlaces SCGI conocidos:
Protocolos de aplicación/puerta de enlace:
Hosts de aplicaciones (específicos del idioma):