WebServer
La classe WebServer
vous permet de démarrer et de contrôler un serveur web pour l'application principale (hôte) ainsi que pour chaque composant (voir la présentation de l'objet Web Server). Cette classe est disponible depuis le "class store" de 4D
.
Objet Web Server
Les objets Web server sont instanciés à l'aide de la commande WEB Server
.
Leurs propriétés et fonctions sont les suivantes :
Sommaire
.accessKeyDefined : Boolean vrai si une access key est définie dans les settings du serveur web |
.certificateFolder : Text dossier dans lequel les fichiers de certificat sont sauvegardés |
.characterSet : Number .characterSet : Text jeu de caractères devant être utilisé par 4D Web Server pour communiquer avec les navigateurs connectés à l'application |
.cipherSuite : Text liste de chiffrement utilisée pour le protocole sécurisé |
.CORSEnabled : Boolean statut du service CORS (Cross-origin resource sharing) pour le serveur web |
.CORSSettings : Collection liste des hôtes et méthodes autorisés pour le service CORS |
.debugLog : Number statut du fichier de log des requêtes HTTP |
.defaultHomepage : Text nom de la page home par défaut |
.HSTSEnabled : Boolean statut du HTTP Strict Transport Security (HSTS) |
.HSTSMaxAge : Number durée maximale (en secondes) d'activation de HSTS pour chaque nouvelle connexion cliente |
.HTTPCompressionLevel : Number niveau de compression pour tous les échanges HTTP compressés pour le serveur HTTP 4D (requêtes clients ou réponses serveur) |
.HTTPCompressionThreshold : Number seuil de taille (octets) pour les requêtes en dessous desquelles les échanges ne doivent pas être compressés |
.HTTPEnabled : Boolean statut du protocole HTTP |
.HTTPPort : Number numéro de port IP d'écoute pour HTTP |
.HTTPTrace : Boolean activation de HTTP TRACE |
.HTTPSEnabled : Boolean statut du protocole HTTPS |
.HTTPSPort : Number numéro de port IP d'écoute pour HTTPS |
.inactiveProcessTimeout : Number durée de vie (en minutes) des process de session legacy inactifs |
.inactiveSessionTimeout : Number durée de vie (en minutes) des sessions legacy inactives (durée définie dans le cookie) |
.IPAddressToListen : Text Adresse IP sur laquelle le serveur Web 4D recevra les requêtes HTTP |
.isRunning : Boolean statut d'exécution du serveur Web |
.keepSession : Boolean True si les sessions legacy sont activées dans le serveur web, False sinon |
.logRecording : Number mode d'enregistrement du log des requêtes (logweb.txt) |
.maxConcurrentProcesses : Number nombre maximal de process Web simultanés pris en charge par le serveur Web |
.maxRequestSize : Number taille maximale (en octets) des requêtes HTTP entrantes (POST) que le serveur web est autorisé à traiter |
.maxSessions : Number nombre maximum de sessions legacy simultanées |
.minTLSVersion : Number version TLS minimale acceptée pour les connexions |
.name : Text nom de l'application de serveur Web |
.openSSLVersion : Text version de la bibliothèque OpenSSL utilisée |
.perfectForwardSecrecy : Boolean disponibilité de PFS sur le serveur |
.rootFolder : Text chemin du dossier racine du serveur Web |
.scalableSession : Boolean True si les sessions évolutives sont utilisées dans le serveur web, et False sinon |
.sessionCookieDomain : Text champ "domain" du cookie de session |
.sessionCookieName : Text nom du cookie utilisé pour stocker l'ID de session |
.sessionCookiePath : Text Champ "path" du cookie de session |
.sessionCookieSameSite : Text valeur du cookie de session "SameSite" |
.sessionIPAddressValidation : Boolean validation d'adresse IP pour les cookies de session |
.start() : Object .start( settings : Object ) : Object démarre le serveur web sur lequel elle est appliquée |
.stop() arrête le serveur web sur lequel elle est appliquée |
WEB Server
Historique
Release | Modifications |
---|---|
18 R3 | Ajout |
19 | prise en charge de .sessionCookieSameSite |
WEB Server : 4D.WebServer
WEB Server( option : Integer ) : 4D.WebServer
Paramètres | Type | Description | |
---|---|---|---|
option | Integer | -> | Serveur Web à référencer (défaut si omis = Web server database ) |
Résultat | 4D.WebServer | <- | Objet Serveur Web |
La commande WEB Server
retourne l'objet Web server par défaut ou l'objet Web server désigné par le paramètre option.
Par défaut, si le paramètre option est omis, la commande renvoie une référence au serveur Web de la base de données, c'est-à-dire le serveur Web par défaut. Pour désigner le serveur Web à renvoyer, vous pouvez passer l'une des constantes suivantes dans le paramètre option :
Constante | Valeur | Commentaire |
---|---|---|
Web server database | 1 | Le serveur Web de la base courante (par défaut si omis) |
Web server host database | 2 | Le serveur Web de la base hôte du composant |
Web server receiving request | 3 | Le serveur Web ayant reçu la requête (serveur Web cible) |
L'objet Web server retourné contient les valeurs courantes des propriétés du serveur Web.
Exemple
L'objet Web server retourné contient les valeurs courantes des propriétés du serveur Web.
// Méthode d'un composant
var $hostWS : 4D.WebServer
$hostWS:=WEB Server(Web server host database)
If($hostWS.isRunning)
...
End if
WEB Server list
Historique
Release | Modifications |
---|---|
18 R3 | Ajout |
WEB Server list : Collection
Paramètres | Type | Description | |
---|---|---|---|
Résultat | Collection | <- | Collection des objets Web server disponibles |
La commande WEB Server list
renvoie une collection de tous les objets Web server disponibles dans l'application 4D.
Une application 4D peut contenir de un à plusieurs serveurs Web :
- un serveur Web pour la base de données hôte (serveur Web par défaut)
- un serveur Web pour chaque composant.
Tous les serveurs Web disponibles sont renvoyés par la commande WEB Server list
, qu'ils soient en cours d'exécution ou non.
L'objet serveur Web par défaut est automatiquement chargé par 4D au démarrage. En revanche, chaque composant serveur Web que vous souhaitez utiliser doit être instancié à l'aide de la commande
WEB Server
.
Vous pouvez utiliser la propriété .name de l'objet Web server pour identifier le projet ou le composant auquel chaque objet Web server de la liste est rattaché.
Exemple
Nous voulons savoir combien de serveurs web en fonctionnement sont 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 propriété .accessKeyDefined contient vrai si une access key est définie dans les settings du serveur web. Cette propriété est utilisée par le serveur web WebAdmin pour valider la configuration de sécurité de l'interface d'administration.
.certificateFolder
.certificateFolder : Text
Chemin du dossier dans lequel les fichiers de certificat sont sauvegardés. Chemin d'accès complet au format POSIX utilisant des filesystems. Lorsque cette propriété est utilisée dans le paramètre settings
de la fonction .start()
, il peut s'agir d'un objet Folder
.
.characterSet
.characterSet : Number
.characterSet : Text
Le jeu de caractères devant être utilisé par 4D Web Server pour communiquer avec les navigateurs connectés à l'application. La valeur par défaut dépend de la langue du système d'exploitation. Peut être un numéro MIBEnum ou un nom (chaîne), identifiants définis par l'IANA. Voici la liste des identifiants correspondant aux jeux de caractères pris en charge par le serveur Web de 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
Le liste de chiffrement utilisée pour le protocole sécurisé. Définit la priorité des algorithmes de chiffrement implémentés par le serveur Web de 4D. Peut être une séquence de chaînes séparées par des deux-points (par exemple "ECDHE-RSA-AES128 -..."). Voir la page des chiffrements sur le site OpenSSL.
.CORSEnabled
.CORSEnabled : Boolean
Le statut du service CORS (Cross-origin resource sharing) pour le serveur web. Pour des raisons de sécurité, les requêtes "cross-domain" sont interdites par défaut au niveau du navigateur. Lorsqu'il est activé (True), les appels XHR (par exemple les requêtes REST) à partir de pages Web hors du domaine peuvent être autorisés dans votre application (vous devez définir la liste des adresses autorisées dans la liste des domaines CORS, voir CORSSettings
ci-dessous). Lorsqu'il est désactivé (False, par défaut), toutes les requêtes entre sites (cross site) envoyées avec CORS sont ignorées. Lorsqu'il est activé (True) et qu'un domaine ou une méthode non autorisé(e) envoie une requête entre sites, elle est rejetée avec une réponse d'erreur "403 - forbidden".
Par défaut : False (désactivé)
Pour plus d'informations sur CORS, veuillez consulter la page de partage de ressources cross-origin sur Wikipedia.
.CORSSettings
.CORSSettings : Collection
Contient le liste des hôtes et méthodes autorisés pour le service CORS (voir propriété CORSEnabled
). Chaque objet doit contenir une propriété host et, optionnellement, une propriété methods :
-
host (texte, obligatoire) : nom de domaine ou adresse IP à partir duquel les pages externes sont autorisées à envoyer des requêtes de données au serveur via CORS. Plusieurs attributs de domaine peuvent être ajoutés pour créer une liste blanche. Si host n'est pas présent ou vide, l'objet est ignoré. Plusieurs syntaxes sont supportées :
- 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 (texte, facultatif) : méthode(s) HTTP acceptée(s) pour l'hôte CORS correspondant. Séparez chaque méthode par un ";" (ex : "post;get"). Si methods est vide, null ou non défini, toutes les méthodes sont activées.
.debugLog
.debugLog : Number
Le statut du fichier de log des requêtes HTTP (HTTPDebugLog_nn.txt, stocké dans le dossier "Logs" de l'application -- nn est le numéro du fichier).
- 0 = désactivé
- 1 = activé sans les parties du corps (la taille du corps est fournie dans ce cas)
- 3 = activé avec les parties du corps en réponse uniquement
- 5 = activé avec des parties du corps sur requête uniquement
- 7 = activé avec des parties du corps en réponse et requête
.defaultHomepage
.defaultHomepage : Text
Le nom de la page home par défaut ou "" pour ne pas envoyer de page home personnalisée.
.HSTSEnabled
.HSTSEnabled : Boolean
Le statut du HTTP Strict Transport Security (HSTS). HSTS permet au serveur Web de déclarer que les navigateurs doivent interagir avec lui uniquement via des connexions HTTPS sécurisées. Les navigateurs enregistreront les informations HSTS la première fois qu'ils recevront une réponse du serveur Web, puis toutes les futures requêtes HTTP seront automatiquement transformées en requêtes HTTPS. La durée de stockage de ces informations par le navigateur est indiquée avec la propriété HSTSMaxAge
. HSTS nécessite l'activation de HTTPS sur le serveur. HTTP doit également être activé pour permettre des connexions client initiales.
.HSTSMaxAge
.HSTSMaxAge : Number
Le durée maximale (en secondes) d'activation de HSTS pour chaque nouvelle connexion cliente. Ces informations sont stockées côté client pendant la durée spécifiée.
Valeur par défaut : 63072000 (2 ans).
.HTTPCompressionLevel
.HTTPCompressionLevel : Number
Le niveau de compression pour tous les échanges HTTP compressés pour le serveur HTTP 4D (requêtes clients ou réponses serveur). Ce sélecteur vous permet d'optimiser les échanges en priorisant soit la vitesse d'exécution (moins de compression), soit la quantité de compression (moins de vitesse).
Valeurs possibles :
- 1 à 9 (où 1 correspond à la compression la plus rapide et 9 la plus élevée).
- -1 = définir un compromis entre la vitesse et le taux de compression.
Valeurs possibles :
.HTTPCompressionThreshold
.HTTPCompressionThreshold : Number
Le seuil de taille (octets) pour les requêtes en dessous desquelles les échanges ne doivent pas être compressés. Ce paramètre est utile pour éviter de perdre du temps machine en compressant les petits échanges.
Seuil de compression par défaut = 1024 octets
.HTTPEnabled
.HTTPEnabled : Boolean
Le statut du protocole HTTP.
.HTTPPort
.HTTPPort : Number
Le numéro de port IP d'écoute pour HTTP.
Par défaut = 80
.HTTPTrace
.HTTPTrace : Boolean
Le activation de HTTP TRACE
. Pour des raisons de sécurité, le serveur Web rejette par défaut les requêtes HTTP TRACE
avec une erreur 405. Lorsque le HTTP TRACE
est activé, le serveur Web répond aux requêtes HTTP TRACE
avec la ligne, l'en-tête et le corps de la requête.
.HTTPSEnabled
.HTTPSEnabled : Boolean
Le statut du protocole HTTPS.
.HTTPSPort
.HTTPSPort : Number
Le numéro de port IP d'écoute pour HTTPS.
Par défaut = 443
.inactiveProcessTimeout
.inactiveProcessTimeout : Number
Cette propriété n'est pas retournée en mode sessions évolutives.
Le durée de vie (en minutes) des process de session legacy inactifs. À la fin du délai d'attente, le process est tué sur le serveur, la méthode base On Web Legacy Close Session
est appelée, puis le contexte de session legacy est détruit.
Par défaut = 480 minutes
.inactiveSessionTimeout
.inactiveSessionTimeout : Number
Cette propriété n'est pas retournée en mode sessions évolutives.
Le durée de vie (en minutes) des sessions legacy inactives (durée définie dans le cookie). À la fin de cette période, le cookie de session expire et n'est plus envoyé par le client HTTP.
Par défaut = 480 minutes
.IPAddressToListen
.IPAddressToListen : Text
Le Adresse IP sur laquelle le serveur Web 4D recevra les requêtes HTTP. Par défaut, aucune adresse spécifique n'est définie. Les formats de chaîne IPv6 et IPv4 sont pris en charge.
.isRunning
.isRunning : Boolean
Propriété en lecture seulement.
Le statut d'exécution du serveur Web.
.keepSession
.keepSession : Boolean
Contient True
si les sessions legacy sont activées dans le serveur web, False
sinon.
Voir également
.logRecording
.logRecording : Number
Le mode d'enregistrement du log des requêtes (logweb.txt).
- 0 = Ne pas enregistrer (par défaut)
- 1 = Enregistrer au format CLF
- 2 = Enregistrer au format DLF
- 3 = Enregistrer au format ELF
- 4 = Enregistrer au format WLF
.maxConcurrentProcesses
.maxConcurrentProcesses : Number
Le nombre maximal de process Web simultanés pris en charge par le serveur Web. Lorsque ce nombre (moins un) est atteint, 4D ne crée aucun autre process et retourne le statut HTTP 503 - Service Unavailable to all new requests.
Valeurs possibles : 500000 - 2147483648
Par défaut = 80
.maxRequestSize
.maxRequestSize : Number
Contient le taille maximale (en octets) des requêtes HTTP entrantes (POST) que le serveur web est autorisé à traiter. Passer la valeur maximale (2147483647) signifie qu'en pratique, aucune limite n'est définie. Cette limite est utilisée pour éviter la saturation du serveur Web en raison de requêtes entrantes trop volumineuses. Si une requête atteint cette limite, le serveur Web la rejette.
Valeurs possibles : 500000 - 2147483647
.maxSessions
.maxSessions : Number
Cette propriété n'est pas retournée en mode sessions évolutives.
Contient le nombre maximum de sessions legacy simultanées. Lorsque vous atteignez la limite, la session la plus ancienne est fermée (et la méthode base On Web Legacy Close Session
est appelée) si le serveur Web doit en créer une nouvelle. Le nombre de sessions legacy simultanées ne peut pas dépasser le nombre total de process Web (propriété maxConcurrentProcesses
, 100 par défaut)
.minTLSVersion
.minTLSVersion : Number
Le version TLS minimale acceptée pour les connexions. Les tentatives de connexion de clients prenant en charge uniquement les versions inférieures au minimum seront rejetées.
Valeurs possibles :
- 1 = TLSv1_0
- 2 = TLSv1_1
- 3 = TLSv1_2 (par défaut)
- 4 = TLSv1_3
En cas de modification, le serveur doit être redémarré pour utiliser la nouvelle valeur.
.name
.name : Text
Propriété en lecture seulement.
Le nom de l'application de serveur Web.
.openSSLVersion
.openSSLVersion : Text
Propriété en lecture seulement.
Le version de la bibliothèque OpenSSL utilisée.
.perfectForwardSecrecy
.perfectForwardSecrecy : Boolean
Propriété en lecture seulement.
Le disponibilité de PFS sur le serveur.
.rootFolder
.rootFolder : Text
Le chemin du dossier racine du serveur Web. Chemin d'accès complet au format POSIX utilisant des filesystems. Peut être passé comme objet Folder
dans le paramètre settings
.
.scalableSession
.scalableSession : Boolean
Contient True
si les sessions évolutives sont utilisées dans le serveur web, et False
sinon.
Voir également
.sessionCookieDomain
.sessionCookieDomain : Text
Le champ "domain" du cookie de session. Utilisé pour contrôler la portée des cookies de session. Si vous définissez, par exemple, la valeur "/*.4d.fr" pour ce sélecteur, le client n'enverra un cookie que lorsque la demande est adressée au domaine ".4d.fr", ce qui exclut les serveurs hébergeant des données statiques externes.
.sessionCookieName
.sessionCookieName : Text
Le nom du cookie utilisé pour stocker l'ID de session.
Propriété en lecture seulement.
.sessionCookiePath
.sessionCookiePath : Text
Le Champ "path" du cookie de session. Utilisé pour contrôler la portée des cookies de session. Par exemple, si vous définissez la valeur "/4DACTION" pour ce sélecteur, le client enverra un cookie uniquement pour les requêtes dynamiques commençant par 4DACTION, et non pour les images, les pages statiques, etc.
.sessionCookieSameSite
Historique
Release | Modifications |
---|---|
19 | Ajout |
.sessionCookieSameSite : Text
Le valeur du cookie de session "SameSite". Valeurs possibles (avec constantes) :
Constante | Valeur | Description |
---|---|---|
Web SameSite Strict | "Strict" | Valeur par défaut - Les cookies sont envoyés uniquement dans un contexte interne (first-party) |
Web SameSite Lax | "Lax" | Les cookies sont également envoyés aux sous-requêtes intersites mais uniquement lorsque l'internaute navigue vers le site d'origine (i.e. |
Web SameSite None | "None" | Les cookies sont envoyés dans tous les contextes, i.e. en réponse aux requêtes internes (first-party) et aux requêtes cross-origin. |
Voir cookie de session SameSite pour des informations détaillées.
.sessionIPAddressValidation
.sessionIPAddressValidation : Boolean
Cette propriété n'est pas utilisée dans le mode de sessions évolutives (il n'existe pas de validation d'adresse IP).
Le validation d'adresse IP pour les cookies de session. Pour des raisons de sécurité, le serveur Web vérifie par défaut l'adresse IP de chaque requête contenant un cookie de session et la rejette si cette adresse ne correspond pas à l'adresse IP utilisée pour créer le cookie. Dans certaines applications spécifiques, vous souhaiterez peut-être désactiver cette validation et accepter les cookies de session, même lorsque leurs adresses IP ne correspondent pas. Par exemple, lorsque les appareils mobiles basculent entre les réseaux Wifi et 3G/4G, leur adresse IP change. Dans ce cas, vous pouvez permettre aux clients de continuer à utiliser leurs sessions Web même lorsque les adresses IP changent (ce paramétrage abaisse le niveau de sécurité de votre application).
.start()
Historique
Release | Modifications |
---|---|
18 R3 | Ajout |
.start() : Object
.start( settings : Object ) : Object
Paramètres | Type | Description | |
---|---|---|---|
settings | Object | -> | Paramètres du serveur web au démarrage |
Résultat | Object | <- | État du démarrage du serveur web |
La fonction .start()
démarre le serveur web sur lequel elle est appliquée, en utilisant les propriétés définies dans le paramètre optionnel settings .
Le serveur Web démarre avec les paramètres par défaut définis dans le fichier de settings du projet ou (base hôte uniquement) à l'aide de la commande WEB SET OPTION
. Cependant, à l'aide du paramètre settings, vous pouvez définir des paramètres personnalisés pour la session du serveur Web.
Tous les paramètres des objets Web Server peuvent être personnalisés, hormis les propriétés en lecture seule (.isRunning, .name, .openSSLVersion, .perfectForwardSecrecy, et .sessionCookieName).
Les paramètres de session personnalisés seront réinitialisés lorsque la fonction .stop()
sera appelée.
Objet retourné
La fonction retourne un objet décrivant le statut démarré du serveur Web. Cet objet peut avoir les propriétés suivantes :
Propriété | Type | Description | |
---|---|---|---|
success | Boolean | Vrai si le serveur web a été correctement démarré, sinon Faux | |
errors | Collection | Pile d'erreurs 4D (non retournée si le serveur web a démarré avec succès) | |
[].errCode | Number | Code d'erreur 4D | |
[].message | Text | Description de l'erreur 4D | |
[].componentSignature | Text | Signature du composant interne qui a retourné l'erreur |
Si le serveur Web a déjà été lancé, une erreur est générée.
Exemple
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()
Historique
Release | Modifications |
---|---|
18 R3 | Ajout |
.stop()
| Paramètres | Type | | Description | | ---------- | ---- | | ------------------------------------------------------ | | | | | Ne requiert aucun paramètre|
|
La fonction .stop()
arrête le serveur web sur lequel elle est appliquée.
Si le serveur Web était lancé, toutes les connexions Web et tous les process Web sont fermés une fois que les requêtes actuellement traitées sont terminées. Si le serveur Web n'était pas démarré, la fonction ne fait rien.
Cette fonction réinitialise les paramètres Web personnalisés définis pour la session à l'aide du paramètre settings de la fonction
.start()
, le cas échéant.
Exemple
Pour arrêter le serveur Web de la base :
var $webServer : 4D.WebServer
$webServer:=WEB Server(Web server database)
$webServer.stop()