Aller au contenu principal
Version: 20 R6 BETA

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

.cipherSuite : Text
.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
.defaultHomepage : Text
.HSTSEnabled : Boolean
.HSTSMaxAge : Number
.HTTPCompressionLevel : Number
.HTTPCompressionThreshold : Number
.HTTPEnabled : Boolean
.HTTPPort : Number
Numéro de port IP d'écoute pour HTTPS
.HTTPTrace : Boolean
activation de HTTP TRACE
.HTTPSEnabled : Boolean
.HTTPSPort : Number
.inactiveProcessTimeout : Number
Durée de vie (en minutes) des sessions legacy inactives
.inactiveSessionTimeout : Number
.IPAddressToListen : Text
.isRunning : Boolean
Statut démarré du serveur Web
.keepSession : Boolean
True si les anciennes sessions sont activées dans le serveur web, False sinon
.logRecording : Number
.maxConcurrentProcesses : Number
.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
.name : Text
.openSSLVersion : Text
Version de la librairie OpenSSL utilisée
.perfectForwardSecrecy : Boolean
Disponibilité du PFS sur le serveur
.rootFolder : Text
.scalableSession : Boolean
True si les sessions évolutives sont utilisées dans le serveur web, et False sinon
.sessionCookieDomain : Text
.sessionCookieName : Text
.sessionCookiePath : Text
Champ "path" du cookie de session
.sessionCookieSameSite : Text
.sessionIPAddressValidation : Boolean
Validation de l'adresse IP des cookies de session
.start() : Object
.start( settings : Object ) : Object

démarre le serveur Web server auquel elle est appliquée
.stop()
arrête le serveur web sur lequel elle est appliquée

WEB Server

Historique
ReleaseModifications
18 R3Ajout
19prise en charge de .sessionCookieSameSite

WEB Server : 4D.WebServer
WEB Server( option : Integer ) : 4D.WebServer

ParamètresTypeDescription
optionInteger->Serveur Web à référencer (défaut si omis = Web server database)
Résultat4D.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 :

ConstanteValeurCommentaire
Web server database1Le serveur Web de la base courante (par défaut si omis)
Web server host database2Le serveur Web de la base hôte du composant
Web server receiving request3Le 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
ReleaseModifications
18 R3Ajout

WEB Server list : Collection

ParamètresTypeDescription
RésultatCollection<-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

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

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 :

  • 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

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

Nom de la page home par défaut ou "" pour ne pas envoyer de page home personnalisée.

.HSTSEnabled

.HSTSEnabled : Boolean

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

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

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

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

Statut du protocole HTTP.

.HTTPPort

.HTTPPort : Number

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

Propriété en lecture seulement. Statut démarré du serveur Web.

.HTTPSPort

.HTTPSPort : Number

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.

Cette propriété n'est pas retournée en mode sessions évolutives.Durée de vie (en minutes) des sessions legacy inactives. À 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.

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

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

.scalableSession

.logRecording

.logRecording : Number

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

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

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.

Propriété en lecture seulement. Disponibilité du PFS sur le serveur.

.openSSLVersion

.openSSLVersion : Text

Propriété en lecture seulement.

Propriété en lecture seulement. Version de la librairie OpenSSL utilisée.

.perfectForwardSecrecy

.perfectForwardSecrecy : Boolean

Propriété en lecture seulement.

La fonction .start() function démarre le serveur Web server auquel elle est appliquée, en utilisant les propriétés définies dans le paramètre optionnel settings.

.rootFolder

.rootFolder : Text

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

.keepSession

.sessionCookieDomain

.sessionCookieDomain : Text

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

Nom du cookie utilisé pour stocker l'ID de session.

Propriété en lecture seulement.

.sessionCookiePath

.sessionCookiePath : Text

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
ReleaseModifications
19Ajout

.sessionCookieSameSite : Text

Valeur "SameSite" du cookie de session. Valeurs possibles (avec constantes) :

ConstanteValeurDescription
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).

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
ReleaseModifications
18 R3Ajout

.start() : Object
.start( settings : Object ) : Object

ParamètresTypeDescription
settingsObject->Paramètres du serveur web au démarrage
RésultatObject<-É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éTypeDescription
successBooleanVrai si le serveur web a été correctement démarré, sinon Faux
errorsCollectionPile d'erreurs 4D (non retournée si le serveur web a démarré avec succès)
[].errCodeNumberCode d'erreur 4D
[].messageTextDescription de l'erreur 4D
[].componentSignatureTextSignature 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
ReleaseModifications
18 R3Ajout

.stop()

ParamètresTypeDescription
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()