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 serveur Web sont instanciés avec 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 contenant les fichiers des certificats |
.characterSet : Number .characterSet : Text jeu de caractères que le serveur Web doit utiliser pour communiquer avec les navigateurs se connectant à 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 d'hôtes et de méthodes autorisées 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 maximum (en secondes) pendant laquelle HSTS est actif pour chaque nouvelle connexion cliente |
.HTTPCompressionLevel : Number niveau de compression pour tous les échanges HTTP compressés du serveur (requêtes clientes ou réponses du serveur) |
.HTTPCompressionThreshold : Number limite de la taille des requêtes (en octets) au-dessous de laquelle les échanges ne doivent pas être compressés |
.HTTPEnabled : Boolean statut du protocole HTTP |
.HTTPPort : Number statut du protocole HTTPS |
.HTTPTrace : Boolean activation de HTTP TRACE |
.HTTPSEnabled : Boolean |
.HTTPSPort : Number |
.inactiveProcessTimeout : Number durée de vie (en minutes) des process de sessions legacy inactifs |
.inactiveSessionTimeout : Number |
.IPAddressToListen : Text adresse IP sur laquelle le serveur Web recevra les requêtes HTTP |
.isRunning : Boolean statut d'exécution du serveur web |
.keepSession : BooleanTrue si les anciennes sessions sont activées dans le serveur web, False sinon |
.logRecording : Number mode d'enregistrement du log des requêtes (logweb.txt) |
.maxConcurrentProcesses : Number nombre maximum de process web simultanés accepté par le serveur Web |
.maxRequestSize : Number taille maximum (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 minimum de TLS acceptée pour les connexions |
.name : Text |
.openSSLVersion : Text version de la librairie OpenSSL utilisée |
.perfectForwardSecrecy : Boolean disponibilité du PFS sur le serveur |
.rootFolder : Text chemin du dossier racine du serveur Web |
.scalableSession : BooleanTrue 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 "SameSite" du cookie de session |
.sessionIPAddressValidation : Boolean validation de l'adresse IP des 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éfini via 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 serveur Web 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 serveur Web de composant 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 contenant les fichiers des certificats. 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()
, elle peut être un objet Folder
.
.characterSet
.characterSet : Number
.characterSet : Text
Le jeu de caractères que le serveur Web doit utiliser pour communiquer avec les navigateurs se connectant à 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
La 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 `COR 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 la liste d'hôtes et de méthodes autorisées pour le service CORS (voir la 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 de 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
La durée maximum (en secondes) pendant laquelle HSTS est actif 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 du serveur (requêtes clientes ou réponses du 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
La limite de la taille des requêtes (en octets) au-dessous de laquelle 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 statut du protocole HTTPS.
Par défaut = 80
.HTTPTrace
.HTTPTrace : Boolean
L'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 HTTP.
.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.
La durée de vie (en minutes) des process de sessions 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.
La durée de vie (en minutes) des process de session legacy inactifs. À 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
L'adresse IP sur laquelle le serveur Web 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 anciennes sessions 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 maximum de process web simultanés accepté 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 la taille maximum (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
La version minimum de TLS 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.
La disponibilité du PFS sur le serveur.
.openSSLVersion
.openSSLVersion : Text
Propriété en lecture seulement.
La version de la librairie OpenSSL utilisée.
.perfectForwardSecrecy
.perfectForwardSecrecy : Boolean
Propriété en lecture seulement.
La 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
La valeur "SameSite" du cookie de session. 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).
La validation de l'adresse IP des 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 facultatif 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 Serveur Web 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()