WebServer
La API de la clase WebServer
permite iniciar y supervisar un servidor web para la aplicación principal (host), así como para cada componente alojado (ver la descripción general de Objeto servidor web). Esta clase está disponible en el almacén de clases de 4D
.
Objeto servidor web
Los objetos del servidor web se instancian con el comando WEB Server
.
Ofrecen las siguientes propiedades y funciones:
Resumen
.accessKeyDefined : Boolean true si se define una llave de acceso en la configuración del servidor web |
.certificateFolder : Text carpeta donde se encuentran los archivos de los certificados |
.characterSet : Number .characterSet : Text conjunto de caracteres que el servidor web 4D debe utilizar para comunicarse con los navegadores conectados a la aplicación |
.cipherSuite : Text lista de cifrado utilizada para el protocolo seguro |
.CORSEnabled : Boolean estado del servicio CORS (Cross-origin resource sharing) para el servidor web |
.CORSSettings : Collection lista de hosts y métodos permitidos para el servicio CORS |
.debugLog : Number estado del archivo de log de las peticiones HTTP |
.defaultHomepage : Text nombre de la página de inicio por defecto |
.HSTSEnabled : Boolean estado del HTTP Strict Transport Security (HSTS) |
.HSTSMaxAge : Number duración máxima (en segundos) de activación de HSTS para cada nueva conexión cliente |
.HTTPCompressionLevel : Number nivel de compresión para todos los intercambios HTTP comprimidos para el servidor HTTP 4D (peticiones clientes o respuestas servidor) |
.HTTPCompressionThreshold : Number umbral de tamaño (bytes) de las peticiones por debajo del cual no se deben comprimir los intercambios |
.HTTPEnabled : Boolean estado del protocolo HTTP |
.HTTPPort : Number número de puerto IP de escucha para HTTP |
.HTTPTrace : Boolean activación de HTTP TRACE |
.HTTPSEnabled : Boolean estado del protocolo HTTPS |
.HTTPSPort : Number número de puerto IP de escucha para HTTPS |
.inactiveProcessTimeout : Number duración de vida (en minutos) de los procesos de sesión legacy inactivos |
.inactiveSessionTimeout : Number duración de vida (en minutos) de las sesiones legacy inactivas (duración definida en la cookie) |
.IPAddressToListen : Text Dirección IP en la que el servidor web 4D recibirá las peticiones HTTP |
.isRunning : Boolean estado de ejecución del servidor web |
.keepSession : Boolean True si las sesiones heredadas son activadas en el servidor web, False en caso contrario |
.logRecording : Number valor de registro del log de peticiones (logweb.txt) |
.maxConcurrentProcesses : Number número máximo de procesos web simultáneos soportados por el servidor web |
.maxRequestSize : Number tamaño máximo (en bytes) de las peticiones HTTP entrantes (POST) que el servidor web puede procesar |
.maxSessions : Number número máximo de sesiones legacy simultáneas |
.minTLSVersion : Number versión mínima de TLS aceptada para las conexiones |
.name : Text nombre de la aplicación del servidor web |
.openSSLVersion : Text versión de la librería OpenSSL utilizada |
.perfectForwardSecrecy : Boolean disponibilidad de PFS en el servidor |
.rootFolder : Text ruta de la carpeta raíz del servidor web |
.scalableSession : Boolean True si las sesiones evolutivas se utilizan en el servidor web, y False en caso contrario |
.sessionCookieDomain : Text campo "domain" de la cookie de sesión |
.sessionCookieName : Text nombre de la cookie utilizada para almacenar el ID de sesión |
.sessionCookiePath : Text campo "path" de la cookie de sesión |
.sessionCookieSameSite : Text valor de la cookie de session "SameSite" |
.sessionIPAddressValidation : Boolean validación de la dirección IP para las cookies de sesión |
.start() : Object .start( settings : Object ) : Object inicia el servidor web en el que se aplica |
.stop() detiene el servidor web en el que se aplica |
WEB Server
Histórico
Lanzamiento | Modificaciones |
---|---|
18 R3 | Añadidos |
19 | soporte de .sessionCookieSameSite |
WEB Server : 4D.WebServer
WEB Server( option : Integer ) : 4D.WebServer
Parámetros | Tipo | Descripción | |
---|---|---|---|
option | Integer | -> | Servidor web a obtener (por defecto si se omite = Web server database ) |
Result | 4D.WebServer | <- | Objeto servidor web |
El comando WEB Server
devuelve el objeto Web server por defecto o el objeto Web server definido por el parámetro option.
Por defecto, si se omite el parámetro option, el comando devuelve una referencia al servidor web de la base de datos, es decir, al servidor web por defecto. Para designar el servidor web a devolver, puede pasar una de las siguientes constantes en el parámetro option:
Constante | Valor | Comentario |
---|---|---|
Web server database | 1 | Servidor web de la base actual (por defecto si se omite) |
Web server host database | 2 | Servidor web de la base local de un componente |
Web server receiving request | 3 | Servidor web que ha recibido la solicitud (servidor web objetivo) |
El objeto servidor web devuelto contiene los valores actuales de las propiedades del servidor web.
Ejemplo
El objeto servidor web devuelto contiene los valores actuales de las propiedades del servidor web.
// Método de un componente
var $hostWS : 4D.WebServer
$hostWS:=WEB Server(Web server host database)
If($hostWS.isRunning)
...
End if
WEB Server list
Histórico
Lanzamiento | Modificaciones |
---|---|
18 R3 | Añadidos |
WEB Server list : Collection
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | Collection | <- | Colección de los objetos del servidor web disponibles |
El comando WEB Server list
devuelve una colección de todos los objetos Web server disponibles en la aplicación 4D.
Queremos saber cuántos servidores web en funcionamiento hay disponibles:
- un servidor web para la base de datos del host (servidor web por defecto)
- un servidor web para cada componente.
Una aplicación 4D puede contener de uno a varios servidores web:
El objeto servidor web por defecto es cargado automáticamente por 4D al inicio. Por otro lado, cada componente servidor web que se quiera utilizar debe ser instanciado utilizando el comando
WEB Server
.
El comando WEB Server list
devuelve todos los servidores web disponibles, estén o no en funcionamiento.
Ejemplo
Queremos saber cuántos servidores web en funcionamiento hay disponibles:
var $wSList : Collection
var $vRun : Integer
$wSList:=WEB Server list
$vRun:=$wSList.countValues(True;"isRunning")
ALERT(String($vRun)+" web server(s) running on "+String($wSList.length)+" available.")
.accessKeyDefined
.accessKeyDefined : Boolean
La propiedad .accessKeyDefined contiene true si se define una llave de acceso en la configuración del servidor web. Esta propiedad es utilizada por el servidor web de WebAdmin para validar la configuración de seguridad de la interfaz de administración.
.certificateFolder
.certificateFolder : Text
Camino de la carpeta donde se encuentran los archivos de los certificados. La ruta se formatea en la ruta completa POSIX utilizando filesystems. Cuando se utiliza esta propiedad en el parámetro settings
de la función .start()
, puede ser un objeto Folder
.
.characterSet
.characterSet : Number
.characterSet : Text
El conjunto de caracteres que el servidor web 4D debe utilizar para comunicarse con los navegadores conectados a la aplicación. El valor por defecto depende del lenguaje del sistema operativo. Puede ser un entero MIBEnum o una cadena Name, identificadores definidos por IANA. Aquí está la lista de identificadores correspondientes a los conjuntos de caracteres soportados por el servidor web 4D:
- 4 = ISO-8859-1
- 12 = ISO-8859-9
- 13 = ISO-8859-10
- 17 = Shift-JIS
- 2024 = Windows-31J
- 2026 = Big5
- 38 = euc-kr
- 106 = UTF-8
- 2250 = Windows-1250
- 2251 = Windows-1251
- 2253 = Windows-1253
- 2255 = Windows-1255
- 2256 = Windows-1256
.cipherSuite
.cipherSuite : Text
El lista de cifrado utilizada para el protocolo seguro. Define la prioridad de los algoritmos de cifrado implementados por el servidor web de 4D. Puede ser una secuencia de cadenas separadas por dos puntos (por ejemplo "ECDHE-RSA-AES128-..."). Ver la página de cifrados en el sitio OpenSSL.
.CORSEnabled
.CORSEnabled : Boolean
El estado del servicio CORS (Cross-origin resource sharing) para el servidor web. Por razones de seguridad, las peticiones "cross-domain" están prohibidas por defecto a nivel del navegador. Cuando está habilitado (True), las llamadas XHR (por ejemplo, peticiones REST) de páginas web fuera del dominio pueden ser permitidas en su aplicación (necesita definir la lista de direcciones permitidas en la lista de dominios CORS, ver CORSSettings
abajo). Cuando se desactiva (False, por defecto), se ignoran todas las peticiones cruzadas enviadas con CORS. Cuando se activa (True) y un dominio o método no permitido envía una solicitud de sitio cruzado, se rechaza con una respuesta de error "403 - prohibido".
Por defecto: False (desactivado)
Para más información sobre CORS, consulte la página Cross-origin resource sharing page en Wikipedia.
.CORSSettings
.CORSSettings : Collection
Contiene el lista de hosts y métodos permitidos para el servicio CORS (ver propiedad CORSEnabled
). Cada objeto debe contener una propiedad host y, opcionalmente, una propiedad methods:
-
host (texto, obligatorio): nombre de dominio o dirección IP desde donde las páginas externas pueden enviar solicitudes de datos al Servidor a través de CORS. Se pueden añadir múltiples atributos de dominio para crear una lista blanca. Si host no está presente o está vacío, el objeto se ignora. Se soportan varias sintaxis:
- 192.168.5.17:8081
- 192.168.5.17
- 192.168.*
- 192.168.*:8081
- http://192.168.5.17:8081
- http://*.myDomain.com
- http://myProject.myDomain.com
- *.myDomain.com
- myProject.myDomain.com
- *
-
methods (texto, opcional): método(s) HTTP aceptado(s) para el host CORS correspondiente. Separe cada método con un ";" (por ejemplo: "post;get"). Si methods está vacío, null o indefinido, todos los métodos están activos.
.debugLog
.debugLog : Number
El estado del archivo de log de las peticiones HTTP (HTTPDebugLog_nn.txt, almacenado en la carpeta "Logs" de la aplicación -- nn es el número del archivo).
- 0 = desactivado
- 1 = activado sin partes del cuerpo (en este caso se suministra el tamaño del cuerpo)
- 3 = activado con las partes del cuerpo en respuesta únicamente
- 5 = activado con las partes del cuerpo en petición únicamente
- 7 = activado con las partes del cuerpo en respuesta y petición
.defaultHomepage
.defaultHomepage : Text
El nombre de la página de inicio por defecto o "" para no enviar la página de inicio personalizada.
.HSTSEnabled
.HSTSEnabled : Boolean
El estado del HTTP Strict Transport Security (HSTS). HSTS permite al servidor web declarar que los navegadores sólo deben interactuar con él a través de conexiones HTTPS seguras. Los navegadores registrarán la información HSTS la primera vez que reciban una respuesta del servidor web, luego cualquier solicitud HTTP futura se transformará automáticamente en solicitudes HTTPS. El tiempo que esta información es almacenada por el navegador se especifica con la propiedad HSTSMaxAge
. HSTS requiere que HTTPS esté activado en el servidor. HTTP también debe estar activado para permitir las conexiones cliente iniciales.
.HSTSMaxAge
.HSTSMaxAge : Number
El duración máxima (en segundos) de activación de HSTS para cada nueva conexión cliente. Esta información se almacena del lado del cliente durante el tiempo especificado.
Valor por defecto: 63072000 (2 años).
.HTTPCompressionLevel
.HTTPCompressionLevel : Number
El nivel de compresión para todos los intercambios HTTP comprimidos para el servidor HTTP 4D (peticiones clientes o respuestas servidor). Este selector permite optimizar los intercambios priorizando la velocidad de ejecución (menos compresión) o la cantidad de compresión (menos velocidad).
Valores posibles:
- 1 a 9 (donde 1 es la compresión más rápida y 9 la más alta).
- -1 = definir un compromiso entre la velocidad y la tasa de compresión.
Valores posibles:
.HTTPCompressionThreshold
.HTTPCompressionThreshold : Number
El umbral de tamaño (bytes) de las peticiones por debajo del cual no se deben comprimir los intercambios. Este parámetro es útil para evitar la pérdida de tiempo de la máquina al comprimir los intercambios pequeños.
Umbral de compresión por defecto = 1024 bytes
.HTTPEnabled
.HTTPEnabled : Boolean
El estado del protocolo HTTP.
.HTTPPort
.HTTPPort : Number
El número de puerto IP de escucha para HTTP.
Por defecto = 80
.HTTPTrace
.HTTPTrace : Boolean
El activación de HTTP TRACE
. Por razones de seguridad, por defecto el servidor web rechaza las peticiones HTTP TRACE
con un error 405. Cuando se activa, el servidor web responde a las peticiones HTTP TRACE
con la línea de petición, el encabezado y el cuerpo.
.HTTPSEnabled
.HTTPSEnabled : Boolean
El estado del protocolo HTTPS.
.HTTPSPort
.HTTPSPort : Number
El número de puerto IP de escucha para HTTPS.
Por defecto = 443
.inactiveProcessTimeout
.inactiveProcessTimeout : Number
Esta propiedad no se devuelve en modo sesiones escalables.
El duración de vida (en minutos) de los procesos de sesión legacy inactivos. Al final del tiempo de espera, el proceso se mata en el servidor, se llama al método base On Web Legacy Close Session
y se destruye el contexto de la sesión heredada.
Por defecto = 480 minutos
.inactiveSessionTimeout
.inactiveSessionTimeout : Number
Esta propiedad no se devuelve en modo sesiones escalables.
El duración de vida (en minutos) de las sesiones legacy inactivas (duración definida en la cookie). Al final de este periodo, la cookie de sesión expira y deja de ser enviada por el cliente HTTP.
Por defecto = 480 minutos
.IPAddressToListen
.IPAddressToListen : Text
El Dirección IP en la que el servidor web 4D recibirá las peticiones HTTP. Por defecto, no se define ninguna dirección específica. Se soportan tanto los formatos de cadena IPv6 como los IPv4.
.isRunning
.isRunning : Boolean
Propiedad de sólo lectura
El estado de ejecución del servidor web.
.keepSession
.keepSession : Boolean
Contiene True
si las sesiones heredadas son activadas en el servidor web, False
en caso contrario.
Ver también
.logRecording
.logRecording : Number
El valor de registro del log de peticiones (logweb.txt).
- 0 = No registrar (por defecto)
- 1 = Registro en formato CLF
- 2 = Registro en formato DLF
- 3 = Registro en formato ELF
- 4 = Registro en formato WLF
.maxConcurrentProcesses
.maxConcurrentProcesses : Number
El número máximo de procesos web simultáneos soportados por el servidor web. Cuando se alcance este número (menos uno), 4D no creará ningún otro proceso y devolverá el estado HTTP 503 - Servicio no disponible a todas las nuevas peticiones.
Valores posibles: 500000 - 2147483647
Valores posibles: 500000 - 2147483648
.maxRequestSize
.maxRequestSize : Number
Contiene el tamaño máximo (en bytes) de las peticiones HTTP entrantes (POST) que el servidor web puede procesar. Pasar el valor máximo (2147483647) significa que, en la práctica, no se define ningún límite. Este límite se utiliza para evitar la saturación del servidor web debido a peticiones entrantes demasiado grandes. Si una petición alcanza este límite, el servidor web la rechaza.
Valores posibles: 500000 - 2147483647
.maxSessions
.maxSessions : Number
Esta propiedad no se devuelve en modo sesiones escalables.
Contiene el número máximo de sesiones legacy simultáneas. Cuando se alcanza el límite, se cierra la sesión heredada más antigua (y se llama al método base On Web Legacy Close Session
) si el servidor web necesita crear una nueva. El número de sesiones heredadas simultáneas no puede superar el número total de procesos web (propiedad maxConcurrentProcesses
, 100 por defecto)
.minTLSVersion
.minTLSVersion : Number
El versión mínima de TLS aceptada para las conexiones. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima.
Valores posibles:
- 1 = TLSv1_0
- 2 = TLSv1_1
- 3 = TLSv1_2 (por defecto)
- 4 = TLSv1_3
Valores posibles:
.name
.name : Text
Propiedad de sólo lectura
El nombre de la aplicación del servidor web.
.openSSLVersion
.openSSLVersion : Text
Propiedad de sólo lectura
El versión de la librería OpenSSL utilizada.
.perfectForwardSecrecy
.perfectForwardSecrecy : Boolean
Propiedad de sólo lectura
El disponibilidad de PFS en el servidor.
.rootFolder
.rootFolder : Text
El ruta de la carpeta raíz del servidor web. La ruta se formatea en la ruta completa POSIX utilizando filesystems. Cuando se utiliza esta propiedad en el parámetro settings
, puede ser un objeto Folder
.
.scalableSession
.scalableSession : Boolean
Contiene True
si las sesiones evolutivas se utilizan en el servidor web, y False
en caso contrario.
Ver también
.sessionCookieDomain
.sessionCookieDomain : Text
El campo "domain" de la cookie de sesión. Se utiliza para controlar el alcance de las cookies de sesión. Si define, por ejemplo, el valor "/*.4d.fr" para este selector, el cliente sólo enviará una cookie cuando la solicitud se dirija al dominio ".4d.fr", lo que excluye a los servidores que alojan datos estáticos externos.
.sessionCookieName
.sessionCookieName : Text
El nombre de la cookie utilizada para almacenar el ID de sesión.
Propiedad de sólo lectura
.sessionCookiePath
.sessionCookiePath : Text
El campo "path" de la cookie de sesión. Se utiliza para controlar el alcance de las cookies de sesión. Si define, por ejemplo, el valor "/4DACTION" para este selector, el cliente sólo enviará una cookie para las peticiones dinámicas que empiecen por 4DACTION, y no para las imágenes, páginas estáticas, etc.
.sessionCookieSameSite
Histórico
Lanzamiento | Modificaciones |
---|---|
19 | Añadidos |
.sessionCookieSameSite : Text
El valor de la cookie de session "SameSite". Valores posibles (utilizando constantes):
Constante | Valor | Descripción |
---|---|---|
Web SameSite Strict | "Strict" | Valor por defecto - Las cookies sólo se envían en un contexto de primera parte |
Web SameSite Lax | "Lax" | Las cookies también se envían en las sub-solicitudes entre sitios, pero sólo cuando un usuario está navegando hacia el sitio de origen (es decir, cuando sigue un enlace). |
Web SameSite None | "None" | Las cookies se envían en todos los contextos, es decir, en las respuestas a las solicitudes de primera parte y de origen cruzado. |
Ver la descripción de Session Cookie SameSite para obtener información detallada.
.sessionIPAddressValidation
.sessionIPAddressValidation : Boolean
Esta propiedad no se utiliza en el modo sesiones escalables (no hay validación de la dirección IP).
El validación de la dirección IP para las cookies de sesión. Por razones de seguridad, por defecto el servidor web comprueba la dirección IP de cada solicitud que contiene una cookie de sesión y la rechaza si esta dirección no coincide con la dirección IP utilizada para crear la cookie. En algunas aplicaciones específicas, es posible que desee desactivar esta validación y aceptar las cookies de sesión, incluso cuando sus direcciones IP no coinciden. Por ejemplo, cuando los dispositivos móviles cambian entre las redes WiFi y 3G/4G, su dirección IP cambiará. En este caso, puede permitir que los clientes puedan seguir utilizando sus sesiones web incluso cuando las direcciones IP cambien (esta configuración reduce el nivel de seguridad de su aplicación).
.start()
Histórico
Lanzamiento | Modificaciones |
---|---|
18 R3 | Añadidos |
.start() : Object
.start( settings : Object ) : Object
Parámetros | Tipo | Descripción | |
---|---|---|---|
settings | Object | -> | Parámetros del servidor web a definir al inicio |
Result | Object | <- | Estado del inicio del servidor web |
La función .start()
inicia el servidor web en el que se aplica, utilizando las propiedades definidas en el parámetro objeto opcional settings.
El servidor web se inicia con la configuración por defecto definida en el archivo de configuración del proyecto o (sólo en la base host) utilizando el comando WEB SET OPTION
. Sin embargo, utilizando el parámetro settings, se pueden definir propiedades personalizadas para la sesión del servidor web.
Todas las configuraciones de los objetos del Servidor Web pueden personalizarse, excepto las propiedades de sólo lectura (.isRunning, .name, .openSSLVersion, .perfectForwardSecrecy y .sessionCookieName).
Todas las configuraciones de los objetos del Servidor Web pueden personalizarse, excepto las propiedades de sólo lectura (.isRunning, .name, .openSSLVersion, .perfectForwardSecrecy y .sessionCookieName).
Objeto devuelto
La función devuelve un objeto que describe el estado de lanzamiento del servidor web. Este objeto puede contener las siguientes propiedades:
Propiedad | Tipo | Descripción | |
---|---|---|---|
success | Boolean | True si el servidor web se ha iniciado correctamente, False en caso contrario | |
errors | Collection | Pila de errores 4D (no se devuelve si el servidor web se inició con éxito) | |
[].errCode | Number | Código de error 4D | |
[].message | Text | Descripción del error 4D | |
[].componentSignature | Text | Firma del componente interno que ha devuelto el error |
Si el servidor web ya fue lanzado, se devuelve un error.
Ejemplo
var $settings;$result : Object
var $webServer : 4D.WebServer
$settings:=New object("HTTPPort";8080;"defaultHomepage";"myAdminHomepage.html")
$webServer:=WEB Server
$result:=$webServer.start($settings)
If($result.success)
//...
End if
.stop()
Histórico
Lanzamiento | Modificaciones |
---|---|
18 R3 | Añadidos |
.stop()
| Parámetros | Tipo | | Descripción | | ---------- | ---- | | ------------------------------------------------------- | | | | | No requiere ningún parámetro|
|
La función .stop()
detiene el servidor web en el que se aplica.
Si el servidor web se ha iniciado, todas las conexiones y procesos web se cierran, una vez que las peticiones actualmente gestionadas han finalizado. Si el servidor web no se ha iniciado, el método no hace nada.
Esta función reinicia los parámetros web personalizados definidos para la sesión mediante el parámetro settings de la función
.start()
, si la hubiera.
Ejemplo
Para detener el servidor web de la base:
var $webServer : 4D.WebServer
$webServer:=WEB Server(Web server database)
$webServer.stop()