La Interfaz de puerta de enlace común simple ( SCGI ) es un protocolo para que las aplicaciones interactúen con servidores HTTP , como una alternativa al protocolo CGI . Es similar a FastCGI pero está diseñado para ser más fácil de analizar. A diferencia de CGI, permite que un proceso de servicio de larga ejecución continúe atendiendo solicitudes, evitando así demoras en responder 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 (puerta de enlace) anterior diseñada para permitir que el programador de aplicaciones evite la complejidad de los sockets y los procesos de servicio de larga ejecución cuando son aceptables una escasa escalabilidad y una gran sobrecarga.
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 mientras permite que el programador de aplicaciones evite analizar ambigüedades 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.
Historia
Neil Schemenauer publicó la especificación del protocolo SCGI original con fecha de 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 a través de 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 ve el final de la solicitud, envía una respuesta y cierra la conexión. Este protocolo no especifica específicamente el formato de la respuesta, 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 aún permanece el nulo de terminación. Ni el nombre ni el valor pueden contener bytes nulos incrustados . Estas consideraciones son estándar para cadenas C, pero a menudo son 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 un solo byte, luego se codifican en netstring. A continuación, se añade el cuerpo sin procesar, si lo hay.
No se permiten nombres duplicados en los encabezados de la solicitud; La combinación de encabezados compatible 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" 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 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 HTTP, varios detalles (como interpretar los octetos del cuerpo del mensaje según el encabezado Transfer-Encoding, CONTENT_LENGTH es el número de octetos después de que el cuerpo ha sido codificado para la 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> "REQUEST_METHOD" <00> "PUBLICAR" <00> "REQUEST_URI" <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.
Servidores web que implementan SCGI
(Esta lista no esta completa)
Enlaces de idioma para la API SCGI
SCGI se puede implementar en cualquier idioma que admita conexiones de red y cadenas de red . La siguiente es una lista parcial de idiomas con enlaces SCGI conocidos:
Ver también
Protocolos de aplicación / Gatway:
- Interfaz de puerta de enlace común (CGI) : inicia un proceso secundario por solicitud
- FastCGI : intenta aumentar la escalabilidad al admitir procesos similares a CGI de larga ejecución
- Protocolo Apache JServ : un protocolo binario destinado a las solicitudes de proxy entre un servidor web y un servidor de aplicaciones.
Hosts de la aplicación (específicos del idioma):
- Rack - Interfaz del servidor web Ruby
- PSGI - Interfaz de puerta de enlace del servidor web Perl
- WSGI - Interfaz de puerta de enlace del servidor web Python
- JSGI : interfaz de puerta de enlace del servidor web JavaScript
Notas
- 1. ^ El documento de especificación 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
- ^ Schemenauer, Neil (30 de octubre de 2001). "SCGI: una alternativa de interfaz de puerta de enlace común simple" . Archivado desde el original el 3 de abril de 2002.
- ^ "scgi-0.1.tar.gz" . Índice de / software / files / scgi. MNX: MEMS y intercambio de nanotecnología . 12 de abril de 2002. Archivado desde el original el 20 de octubre de 2002 .
enlaces externos
- Página web oficial
- Especificación del protocolo SCGI