En la conferencia anterior, presentamos las funciones de los programas CGI. Hoy entramos en: Parte 2, el concepto de programación CGI. El contenido de esta conferencia es la base para una comprensión profunda de los programas CGI.
Esta serie de conferencias utiliza Delphi para escribir programas CGI. Para este contenido, Delphi se ha encapsulado en sus clases. Quizás piense que esta conferencia es innecesaria. Pero creo que una de las ventajas de CGI es que hay muchos lenguajes de desarrollo disponibles (este tema se mencionará a continuación) y el contenido de esta conferencia se puede usar en cualquier lenguaje de programación (incluido Delphi). Por lo tanto, para aprovechar CGI, el contenido de esta conferencia aún es necesario. Además, el contenido de esta conferencia es la base para una comprensión profunda de los programas CGI;
2. Especificaciones CGI:
Normalmente, un servidor WEB es una computadora poderosa, pero es imposible utilizar toda la potencia de procesamiento. La aparición de CGI permite a las personas utilizar la potencia de procesamiento del servidor WEB para proporcionar contenido interesante y dinámico a clientes remotos. La especificación CGI se aplica a servidores WEB y aplicaciones que se ejecutan en la WEB. No forma parte del protocolo HTTP, pero la mayoría de los servidores WEB admiten esta especificación, como NCSA httpd, CERN httpd, Apache httpd, IIS y OmniHTTPD que utilizamos.
2.1, descripción general del CGI
CGI define un conjunto de reglas que se siguen en la interoperación entre servidores WEB, navegadores y aplicaciones. Por ejemplo, consulte el sistema de base de datos remoto a través de un navegador WEB:
2.2. Idioma:
Los programas CGI se pueden escribir en cualquier lenguaje que pueda ejecutarse en el servidor WEB. Debe elegir el idioma con el que esté más familiarizado y que mejor se adapte a su trabajo actual. Por ejemplo: el lenguaje Perl es adecuado para el procesamiento de cadenas y archivos, C es más adecuado para programas grandes y complejos, Visual Basic y Delphi son adecuados para el procesamiento de bases de datos, etc. Los siguientes son lenguajes de programación CGI de uso común:
do
C++
perla
tcl
Pitón
Guiones de shell
Visual Básico
Delfos
Applescript
2.3, método CGI:
La forma de llamar a CGI se denomina método CGI. Hay tres métodos CGI principales:
2.3.1, método OBTENER:
El método GET es el método utilizado por el navegador para realizar una solicitud al servidor WEB. Al utilizar este método, el programa CGI obtiene datos de la variable de entorno QUERY_STRING. Para obtener los parámetros de entrada, el programa CGI debe analizar esta variable de entorno. Cuando los datos a transmitir son muy largos se debe utilizar el método POST.
2.3.2, método POST:
Cuando se utiliza el método POST, los programas CGI obtienen datos de entrada de la entrada estándar (entrada estándar). Dado que no hay EOF (Fin de archivo) al final de los datos de entrada, el programa CGI debe usar el valor de la variable de entorno CONTENT_LENGTH para poder leer correctamente los datos de entrada. La mayor ventaja de utilizar este método es que puede transmitir una gran cantidad de datos, mientras que el método GET no puede transmitir una gran cantidad de datos debido a la limitación de la longitud de la URL (generalmente no más de 1024 bytes). En este momento, el método POST es la única opción.
2.3.3, método CABEZA:
El método HEAD es básicamente el mismo que el método GET, excepto que transmite datos desde el servidor WEB al navegador. Además, sólo se transmite la información del encabezado HTTP.
2.4. Especificaciones de la interfaz:
A continuación se presentarán los cuatro métodos principales para que los servidores WEB se comuniquen con programas CGI: variables de entorno, línea de comando, entrada estándar y salida estándar. (Basado en CGI versión 1.1)
2.4.1.Variables de entorno:
AUTH_TYPE: si el servidor admite reconocimientos y el script está protegido, proporciona el tipo de reconocimiento.
CONTENT_LENGTH: proporciona la longitud de los datos transmitidos mediante el método POST en bytes. La variable está vacía cuando se utiliza el método GET.
CONTENT_TYPE: proporciona el tipo MINE de datos transmitidos cuando se utiliza el método POST. La variable está vacía cuando se utiliza el método GET. Tales como: aplicación/x-www-form-urlencoded.
GETWAY_INTERFACE: proporcione el nombre de la especificación CGI y el número de versión, como por ejemplo: CGI/1.1.
PATH_INFO: proporciona información de ruta adicional después del nombre del programa CGI en la URL.
PATH_TRANSLATED: la ruta física del programa CGI, generalmente el directorio raíz WEB, el nombre del script e información de ruta adicional.
QUERY_STRING: la información después del carácter "?" en la URL. Esta variable de entorno proporciona los datos de entrada cuando se utiliza el método GET.
REMOTE_ADDR: La IP de la computadora remota que realiza la solicitud.
REMOTE_HOST: El nombre de la computadora remota que realiza la solicitud.
REMOTE_IDENT: Da el nombre de usuario definido en RFC 931.
Nota: RFC 931 es el documento autorizado de Internet y describe el método para confirmar la identificación de los usuarios en conexiones TCP. Documentación en: http://sunsite.auc.dk/RFC/rfc/rfc931.html.
REMOTE_USER: Proporciona el nombre de usuario autorizado del cliente que realiza la solicitud.
REQUEST_METHOD: El método para realizar la solicitud, que puede ser GET, HEAD y POST.
SCRIPT_NAME: la ruta virtual para ejecutar el programa CGI, como por ejemplo: /cgi-bin/query.cgi.
SERVER_NAME: el nombre de dominio o la dirección IP de la computadora que ejecuta el software del servidor WEB, como por ejemplo: www.chinabyte.com.
SERVER_PORT: el número de puerto del servidor WEB, el valor predeterminado es 80.
SERVER_PROTOCOL: el nombre del protocolo y el número de versión utilizado por el servidor WEB, como: HTTPD/1.0.
SERVER_SOFTWARE: El nombre del servidor WEB que ejecuta programas CGI. El formato es "nombre del servidor/número de versión", como por ejemplo: NCSA/1.5b5.
HTTP_ACCEPT: "Acccpect: línea de encabezado" enviada por el cliente, correspondiente al tipo MIME que el cliente puede manejar, en el formato de "tipo/subtipo, tipo/subtipo, etc.", como por ejemplo: */*, imagen/ gif, imagen/jpeg.
HTTP_REFERER: Sí Referer: el directorio de la línea de encabezado, que contiene la URL del formulario (Formulario) al realizar una solicitud CGI, como por ejemplo: http://www.chinabyte.com/register.form.
HTTP_USER_AGENT: el nombre del navegador del cliente que realizó la solicitud, como por ejemplo: Mozilla/1.2N (Windows;I;32bit).
Puede ver las variables de entorno anteriores utilizando el programa de demostración de la lección anterior.
2.4.2, línea de comando:
La línea de comando CGI solo se usa cuando se consulta con ISINDEX. Una consulta ISINDEX es una consulta especial encerrada entre <ISINDEX> y <BASE HREP="..">. La línea de comando puede tomar múltiples parámetros.
2.4.3. Entrada estándar:
Cuando se utiliza el método POST, el programa CGI obtiene los datos transmitidos de la entrada estándar. Como se mencionó anteriormente, se deben utilizar los valores de las variables de entorno CONTENT_TYPE y CONTENT_LENGTH. Lo que se debe tener en cuenta es que la URL en los datos está codificada, por ejemplo, los espacios se reemplazan por signos más, ~ se reemplaza por% 7E, etc.
2.4.4. Salida estándar:
Los programas CGI envían datos al navegador a través de una salida estándar o comandos que pueden ser interpretados por el servidor WEB. Los programas CGI pueden comunicarse con el navegador a través del servidor WEB y los nombres de sus programas deben comenzar con "nph-", que representa información de encabezado no analizada. El programa CGI es responsable de la exactitud de la información del encabezado HTTP devuelta al navegador.
Cuando no se utiliza el programa nph, el servidor busca tres encabezados especiales que el CGI puede devolver:
Tipo de contenido: información del encabezado de tipo MIME, como: Al ingresar HTML, se usa comúnmente "Tipo de contenido: texto/html".
Ubicación: Dígale al servidor que está apuntando a otro documento. El servidor redirige al cliente o envía el contenido del documento, dependiendo de si la URL es una ruta completa o relativa.
Estado: la línea de estado enviada por el servidor al cliente. El formato es: nnnXXXXX, nnn es un código de tres dígitos y XXXXX es el texto de descripción correspondiente.