Aller au contenu principal
Version: v20 R4 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 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
VersionModifications
v18 R3Ajout
v19prise 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é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 :

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
VersionModifications
v18 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 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 :

  • 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

.scalableSession

.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

.keepSession

.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
VersionModifications
v19Ajout

.sessionCookieSameSite : Text

Le valeur du cookie de session "SameSite". 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).

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
VersionModifications
v18 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 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é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
VersionModifications
v18 R3Ajout

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