Retour | Home | Contact |
---|
Firewall.
Garantir la sécurité d'un domaine réseau, à savoir :
Un pare-feu (firewall) est une architecture réseau (et non forcément une seule machine comme on le pense souvent).
Il peut fournir divers services :
Les pare-feux situés entre deux parties communiquant via RMI (une
applet et son serveur par exemple) interdisent généralement
l'accès
au port RMI par défaut (1099), ce qui amène
automatiquement (si la propriété http.proxyHost
est spécifiée, voir plus bas) le client RMI à tenter
un tunneling HTTP. Si cette tentative de tunnelling
n'est pas souhaitée,
on fixera la propriété java.rmi.server.disableHttp=true.
Parce les requêtes HTTP ne peuvent être émises que dans une direction au travers d'un pare-feu, un client ne peut exporter ses propres objets au-delà du pare-feu, parce qu'une machine au-delà de ce pare-feu ne peut invoquer une méthode en retour vers le client (à vérifier si le pare-feu autorise les requêtes entrantes sur le port HTTP).
Il arrive également que le pare-feu d'un utilisateur empêche
ce dernier de se connecter à un serveur DNS externe,
et donc de résoudre
des noms symboliques (www.javarome.org
par exemple) en adresses physique
(195.102.32.38 par exemple). Une applet sera par exemple incapable de charger
une de ses
ressources,
parce qu'utilisant son codebase exprimé sous forme de nom symbolique
pour récupérer cette ressource.
Il existe plusieurs solutions pour résoudre ce problème :
<applet>
et
non pas le nom symbolique. Ceci impose de ne plus changer d'adresse IP.L'utilisation du protocole HTTP est donc une règle quasi-générale pour franchir les pare-feux. Ce protocole possède cependant de nombreux désavantages, qu'il peut être nécessaire de contourner afin que le support des pare-feux n'handicape pas fonctionnellement notre application.
HTTP n'est en effet pas un protocole dit "connecté", ce qui signifie que la connection établie par le client est censée être fermée une fois la réponse envoyée à ce premier.
Ce n'est heureusement pas toujours vrai.
De nombreuses implémentations de HTTP ont introduit une optimisation de ce principe, au travers des "connexions persistantes".
Le principe des Connexions Persistantes consiste à réutiliser une connexion établie au lieu de la fermer et d'en réouvrir une autre.
Ce mécanisme est fourni dans de nombreuses implémentations de
HTTP, au travers de l'option Keep-Alive
. Elle devait
cependant être négotiée avec le serveur (qui devait la comprendre)
et ne constituait pas le comportement par défaut de HTTP 1.0. Ceci pouvait
en outre poser des problèmes lorsqu'un client souhaitait se connecter
à un tel serveur via un proxy HTTP qui ne comprenait pas cette option,
et se bornait à la transmettre au serveur final. Ce dernier, qui comprenait
l'option, ne fermait pas sa connexion, ce qui bloquait le proxy qui, lui, attendait
une fermeture.
HTTP 1.1 a apporté de nombreuses optimisations, dont l'utilisation par
défaut des connexions persistantes, où l'exception consiste donc
à fermer une connexion (la partie effectuant cette fermeture devant en
informer l'autre via l'option Connection: close
).
L'utilisation de connexions persistantes par défaut permit par la suite
diverses autres optimisations, comme l'envoi de plusieurs requêtes HTTPà la suite (les réponses sont renvoyées dans l'ordre).
Un client HTTP (navigateur Web typiquement), tentera donc d'envoyer des requêtes HTTP sur une connexion existante (pour peu que le même serveur soit visé) tant que cette connexion n'a pas été fermée. Le nombre de requêtes acceptées sur une même connexion peut être paramétrable côté serveur (dans la configuration d'un serveur Web par exemple), ainsi que le délai d'inactivité accepté avant la fermeture d'une connexion (timeout).
Ou Pending Connections.
Certains besoins fonctionnels, tels qu'une connexion full-duplex peuvent être incompatibles avec un mode déconnecté ou déconnectable (un serveur désirant envoyer des événements à un client par exemple - le fameux server push ou push).
Une technique existe cependant pour contourner ce problème, consistant pour le client à se connecter au serveur en lui indiquant qu'il souhaite recevoir un événement. Le serveur enregistre le fait qu'il s'agit d'une connexion pour notification d'événement et ne déconnecte pas le client. Lorsque l'événement surviendra, le serveur utilisera cette connexion pour en avertir le client.
Ce procédé sous-entend cependant un accord de principe entre le client et le serveur.
Un serveur mandataire (ou proxy, serveur de délégation) est une machine mandatée pour effectuer les requêtes réseau de machines du réseau interne à la place de celles-ci.
Ceci permet :
Il existe deux grandes catégories de serveurs mandataires :
Retour | Home | Contact |
---|