Passer au contenu principal

Captive Portal personnalisé : Guide HTML et CSS

Ce guide de référence technique présente les normes de développement, l'architecture CSS et les contraintes réseau requises pour concevoir et coder une page de destination de Captive Portal personnalisée. Il fournit aux développeurs frontend et aux architectes réseau des stratégies concrètes pour naviguer dans les environnements Apple CNA et Android webview, garantissant ainsi des expériences WiFi invités parfaites au pixel près, conformes et hautement performantes.

📖 11 min de lecture📝 2,731 mots🔧 2 exemples concrets3 questions d'entraînement📚 8 définitions clés

Écouter ce guide

Voir la transcription du podcast
Portail Captif Personnalisé : Guide HTML et CSS — Une Fiche Technique Purple [INTRODUCTION] Bienvenue dans la série des Fiches Techniques Purple. Aujourd'hui, nous entrons dans le vif du sujet sur un élément qui concerne chaque déploiement de WiFi invité : le Captive Portal. Plus précisément, nous allons voir comment rédiger un code HTML et CSS propre et fiable pour une page d'accueil de Captive Portal personnalisée. Si vous vous êtes déjà connecté au WiFi d'un hôtel et avez été accueilli par une page de connexion cassée — images manquantes, texte sans style, bouton de connexion qui ne réagit pas au toucher — vous avez fait l'expérience de ce qui se produit lorsqu'un développeur conçoit un portail sans comprendre les contraintes de l'environnement dans lequel il s'exécute. Aujourd'hui, nous allons faire en sorte que cela ne vous arrive pas. Cette fiche technique s'adresse aux développeurs frontend, aux designers créatifs et aux développeurs web qui conçoivent un Captive Portal de zéro ou qui personnalisent un modèle existant. Nous aborderons la structure HTML, les règles CSS essentielles, les contraintes du mini-navigateur Apple CNA qui piègent même les développeurs chevronnés, et comment les plateformes comme le concepteur de portail de Purple peuvent éliminer presque entièrement cette complexité. Entrons dans le vif du sujet. [ANALYSE TECHNIQUE APPROFONDIE] Tout d'abord, définissons ce qu'est réellement un Captive Portal au niveau du réseau. Lorsqu'un appareil se connecte à un réseau WiFi qui nécessite une authentification, le réseau intercepte le trafic HTTP et redirige l'utilisateur vers une page d'accueil. C'est le Captive Portal. L'utilisateur voit une page de connexion, effectue une action — saisir un e-mail, accepter les conditions, se connecter via les réseaux sociaux — puis le réseau lui accorde un accès complet à Internet. Le point critique à comprendre est l'endroit où cette page est affichée. Sur les appareils iOS, elle s'ouvre dans le Captive Network Assistant d'Apple — le CNA — qui est une version allégée de WebKit webview. Ce n'est pas Safari. Il n'a pas de cookies persistants. Il ne peut pas charger de ressources externes. Son support JavaScript est limité. Et il se ferme dès que l'utilisateur bascule vers une autre application. Sur macOS, le CNA s'affiche dans une fenêtre fixe de 900 par 572 pixels. Sur Android, les appareils modernes utilisent les Chrome Custom Tabs, qui sont nettement plus performants. Windows 10 ouvre le navigateur par défaut de l'utilisateur. Les appareils Samsung utilisent Samsung Internet. Cette fragmentation des plateformes est la principale source de dysfonctionnement des portails captifs en production. Les développeurs testent sur leur téléphone Android, tout semble parfait, puis les clients de l'hôtel équipés d'un iPhone se retrouvent face à un écran blanc avec du texte sans style. Voyons donc comment coder de manière défensive. La règle d'or pour le HTML et le CSS d'un Captive Portal est la suivante : traitez la page comme si elle n'avait pas de connexion Internet. Car pendant la phase d'authentification, c'est le cas. Le réseau est captif. Toute ressource que votre page tente de charger depuis une URL externe — une police Google Font, une feuille de style hébergée sur un CDN, une bibliothèque JavaScript, un logo — échouera silencieusement ou provoquera un indicateur de chargement infini.Commençons par la structure HTML. Votre document doit être une page HTML5 propre. Dans l'en-tête (head), vous devez inclure une balise méta viewport avec le contenu défini sur width=device-width et initial-scale=1. C'est non négociable pour le rendu mobile. Sans cela, iOS affichera la page avec une largeur de 980 pixels et la réduira, rendant le tout microscopique. Votre CSS doit être intégré — soit dans un bloc style au sein de l'élément head, soit sous forme d'attributs de style en ligne sur chaque élément. N'utilisez pas de feuille de style externe liée via une balise link. Cette feuille de style réside sur votre serveur, que le réseau captif ne peut pas atteindre pendant l'authentification. La page s'affichera alors sans aucun style. Pour les polices, utilisez une pile de polices système. Quelque chose comme : font-family — apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif. Cela indique au navigateur d'utiliser la police système disponible. N'utilisez pas Google Fonts. L'appel d'importation échouera et votre police de secours sera Times New Roman, ce qui ne correspond pas à l'image de marque pour laquelle votre client paie. Pour les images — votre logo, les graphismes d'arrière-plan, les éléments décoratifs — vous avez deux options. Soit vous les hébergez sur le même serveur de Captive Portal, ce qui signifie qu'elles se trouvent sur le même réseau local et sont accessibles avant la fin de l'authentification. Soit, et c'est encore mieux, vous les encodez sous forme d'URI de données Base64 directement dans votre HTML ou CSS. Cela élimine complètement toute dépendance externe. Parlons maintenant de la mise en page. Étant donné que plus de quatre-vingt-dix pour cent des connexions aux portails captifs se font sur des appareils mobiles, votre conception doit être pensée en priorité pour le mobile (mobile-first). Cela signifie une mise en page sur une seule colonne, avec une largeur maximale d'environ 480 pixels, centrée sur la page. Utilisez flexbox sur l'élément body — display flex, flex-direction column, align-items center, justify-content center, min-height 100vh. Cela centre votre carte de contenu verticalement et horizontalement sur n'importe quelle taille d'écran. Votre bouton d'appel à l'action principal doit être adapté au tactile. Les directives d'interface humaine d'Apple spécifient une zone de contact minimale de 44 par 44 pixels. En pratique, pour un CTA principal, privilégiez une hauteur d'environ 48 pixels, sur toute la largeur du conteneur, avec un border-radius d'environ 8 à 12 pixels. Pour les champs de formulaire — saisie d'e-mail, saisie de nom — définissez la taille de la police (font-size) à au moins 16 pixels. C'est essentiel. iOS Safari et le CNA zoomeront automatiquement sur tout champ de saisie dont la taille de police est inférieure à 16 pixels, ce qui brisera votre mise en page soigneusement élaborée. Définir font-size à 16 pixels ou plus empêche ce comportement de zoom. La section sur le consentement légal mérite une attention particulière. Conformément au GDPR, si vous collectez des données personnelles — même une simple adresse e-mail —, vous devez obtenir un consentement explicite et éclairé. Cela implique une case à cocher qui est décochée par défaut, avec un libellé visible indiquant clairement ce à quoi l'utilisateur consent. Ne pré-cochez pas la case. La case de consentement elle-même doit être clairement visible sans avoir à faire défiler la page. Voici maintenant un détail d'implémentation crucial, spécifiquement pour le CNA d'iOS. Lorsque l'utilisateur termine l'authentification, le CNA vérifie si le domaine captif est devenu accessible. Cette vérification est déclenchée par une navigation complète sur la page, et non par des appels AJAX JavaScript. Cela signifie que si vous concevez une application monopage qui soumet le formulaire via fetch ou XMLHttpRequest et met à jour le DOM sans redirection complète de la page, le CNA ne détectera jamais que l'authentification est terminée. Vous devez rediriger vers une nouvelle URL après l'authentification — une redirection HTTP complète, et non une manipulation du DOM par JavaScript. C'est l'une des erreurs les plus courantes dans le développement de Captive Portal. Pour le JavaScript, restez minimaliste. Le CNA a un support JS limité et n'a pas accès à localStorage ou sessionStorage. Les cookies sont détruits à la fermeture du CNA. Toute gestion d'état qui repose sur ces API de navigateur échouera. Les écouteurs d'événements en JavaScript natif (Vanilla) fonctionnent très bien. jQuery est une dépendance externe de 30 kilo-octets qui ne parviendra pas à se charger. [RECOMMANDATIONS D'IMPLÉMENTATION ET PIÈGES À ÉVITER] Voici la liste de contrôle pratique pour votre implémentation. Premièrement : la balise meta viewport, toujours. Deuxièmement : tout le CSS en ligne, pas de feuilles de style externes. Troisièmement : toutes les images servies depuis le serveur du Captive Portal ou encodées en Base64. Quatrièmement : une pile de polices système, pas de polices web. Cinquièmement : une taille de police minimale de 16 pixels sur tous les champs de saisie. Sixièmement : des zones de clic adaptées au tactile, d'au moins 44 par 44 pixels. Septièmement : une mise en page sur une seule colonne, d'une largeur maximale de 480 pixels. Huitièmement : une redirection complète de la page lors de l'authentification, et non une mise à jour d'état en JavaScript. Neuvièmement : une case à cocher de consentement conforme au GDPR, décochée par défaut. Dixièmement : testez sur un appareil iOS réel en utilisant un véritable réseau captif, et non un aperçu de navigateur. Les pièges que je vois le plus souvent en production. Numéro un : Google Fonts — supprimez l'importation, elle échouera. Numéro deux : les bibliothèques JavaScript externes — Bootstrap, jQuery, tout script hébergé sur un CDN échouera. Numéro trois : les variables CSS déclarées dans une feuille de style externe — elles doivent figurer dans votre bloc de style en ligne. Numéro quatre : les images d'arrière-plan référencées par URL — encodez-les en Base64. Numéro cinq : la soumission de formulaire AJAX sans redirection post-authentification — le CNA ne détectera pas la fin de l'authentification. Parlons maintenant franchement de l'alternative entre développer ou acheter. Développer un Captive Portal personnalisé à partir de zéro signifie que vous êtes également responsable de l'infrastructure backend — le serveur RADIUS, la base de données, le certificat SSL, la configuration DNS, l'intégration réseau avec vos points d'accès et les correctifs de sécurité continus. C'est un engagement d'ingénierie considérable. Le créateur de portail de Purple vous offre une interface glisser-déposer avec un éditeur HTML et CSS personnalisé pour les développeurs qui ont besoin d'un contrôle au pixel près, tout en gérant l'ensemble de l'infrastructure backend — l'authentification, la capture de données, les analyses, les outils de conformité GDPR et les intégrations réseau avec plus de 200 fournisseurs de points d'accès. Vous bénéficiez du contrôle créatif sans la charge de l'infrastructure. [QUESTIONS-RÉPONSES RAPIDES] Puis-je utiliser CSS Grid dans un Captive Portal ? Oui, mais testez spécifiquement sur iOS CNA. Flexbox bénéficie d'un support plus large dans les anciennes versions de WebKit. Puis-je utiliser des logos SVG ? Oui, les SVG intégrés sont entièrement pris en charge et préférables aux PNG encodés en Base64 pour les logos, car ils s'adaptent parfaitement aux écrans retina. Le CNA macOS prend-il en charge les mêmes contraintes que le CNA iOS ? Dans l'ensemble oui, avec une différence : le CNA macOS s'affiche dans une fenêtre fixe de 900 par 572 pixels. Puis-je utiliser un framework CSS comme Tailwind ? Uniquement si vous générez un fichier CSS purgé et autonome, et que vous l'intégrez directement dans votre bloc de style. Qu'en est-il de l'HTTPS ? Votre Captive Portal doit être servi via HTTP pour que la redirection initiale fonctionne — les connexions HTTPS ne peuvent pas être interceptées par le réseau captif. [RÉSUMÉ ET PROCHAINES ÉTAPES] Pour résumer le briefing d'aujourd'hui. Un Captive Portal personnalisé est un environnement web contraint, et non un contexte de navigateur standard. L'Apple CNA et les webviews Android imposent des limites strictes aux ressources externes, aux cookies, au JavaScript et à l'état de la session. La solution consiste à créer des pages HTML autonomes avec du CSS intégré, des polices système, des images encodées en Base64 et des redirections de page entière lors de l'authentification. Pour les exploitants de sites et les équipes informatiques qui évaluent leurs options : si votre besoin est un portail entièrement personnalisé à l'image de votre marque avec du HTML et du CSS sur mesure, le choix se résume à créer et maintenir vous-même l'intégralité de la pile technique — ce qui représente un engagement d'ingénierie conséquent — ou à utiliser une plateforme comme Purple qui fournit la capacité d'édition HTML et CSS personnalisée en plus d'une infrastructure backend de niveau production. Les prochaines étapes à partir d'ici : consultez la documentation de l'éditeur de portail de Purple, auditez votre portail existant par rapport à la checklist mobile-first que nous avons abordée aujourd'hui, et si vous partez de zéro, utilisez la structure de modèle HTML que nous avons présentée comme base de référence. Merci pour votre écoute, et à bientôt pour le prochain briefing.

📚 Part of our core series: Le guide ultime des Captive Portals

header_image.png

Résumé exécutif

Pour les établissements d'entreprise — allant des hôtels de luxe Hospitality et des chaînes de magasins Retail aux hubs de transport Transport et aux campus médicaux modernes Healthcare — la page d'accueil du WiFi invité est la porte d'entrée numérique. Cependant, plus de 90 % des connexions au WiFi invité s'effectuent sur des appareils mobiles, où l'affichage n'est pas géré par des navigateurs standards comme Safari ou Chrome, mais par des webviews Captive Network Assistant (CNA) hautement restreintes [1]. Ces « mini-navigateurs » imposent de strictes limites de bac à sable (sandbox) : ils bloquent les CDN externes, désactivent les cookies persistants, ignorent les polices web externes et restreignent sévèrement l'exécution de JavaScript afin d'atténuer les risques de sécurité et d'empêcher le détournement de session [2].

Lorsqu'un développeur conçoit un Captive Portal en utilisant les standards web traditionnels, ces contraintes entraînent des mises en page brisées, des éléments de marque manquants et des boutons de connexion inopérants, ce qui impacte directement la satisfaction client et l'engagement numérique. Ce guide apporte des solutions à ces défis, en présentant des pratiques de codage défensives — telles que le CSS en ligne, l'encodage d'actifs en Base64, les piles de polices système et les processus d'authentification explicites basés sur la navigation — pour garantir un affichage multiplateforme fluide. De plus, nous examinons comment l'utilisation d'une solution gérée comme le créateur de portail de Purple permet aux développeurs de conserver un contrôle créatif complet sur le HTML/CSS tout en déléguant l'authentification RADIUS, la mise à l'échelle des bases de données, la conformité GDPR/PCI et les intégrations de points d'accès multi-constructeurs [3].

Analyse technique approfondie

Pour concevoir un Captive Portal personnalisé et résilient, les développeurs doivent comprendre l'interception au niveau du réseau et la virtualisation du navigateur qui se produisent lorsqu'un invité s'associe à un SSID ouvert.

Le cycle de vie du Captive Portal

Lorsqu'un appareil client s'associe à un SSID captif, la séquence suivante est déclenchée :

  1. Association IP : L'appareil effectue une poignée de main en 3 étapes (3-way handshake) et demande une adresse IP via DHCP.
  2. Sonde de connectivité active : Le gestionnaire de réseau en arrière-plan du système d'exploitation envoie immédiatement une requête HTTP GET à une URL test dédiée et neutre (par exemple, http://captive.apple.com/hotspot-detect.html d'Apple ou http://connectivitycheck.gstatic.com/generate_204 de Google) [1].
  3. Interception DNS/HTTP : Le contrôleur LAN sans fil (WLC) local ou le point d'accès (AP) intercepte cette requête HTTP sur le port 80. Au lieu de renvoyer le statut HTTP 200 ou 204 attendu, la passerelle redirige le trafic du client vers l'URL de la page de destination du Captive Portal via une redirection HTTP 302 [2].
  4. Apparition de la Webview : Détectant la redirection, le système d'exploitation lance son mini-navigateur natif Captive Network Assistant (CNA) pour afficher la page d'accueil redirigée, évitant ainsi à l'utilisateur d'avoir à ouvrir manuellement un navigateur complet.
  5. Authentification et transition d'état : L'utilisateur remplit le formulaire de connexion, soumettant ses identifiants au serveur du portail, qui ordonne à la passerelle (souvent via un Access-Accept RADIUS ou un appel API externe) d'autoriser l'adresse MAC.
  6. Handshake de sortie du CNA : Le mini-navigateur du CNA effectue un autre HTTP GET vers son URL canary. S'il reçoit la réponse 200/204 attendue, il remplace son bouton en haut à droite "Annuler" par "Terminé" et établit la connexion WiFi comme interface réseau principale.

Contraintes des mini-navigateurs spécifiques aux plateformes

Chaque système d'exploitation gère ce cycle de vie au sein d'environnements webview différents, ce qui entraîne un comportement très fragmenté. Le tableau ci-dessous détaille ces contraintes critiques :

Plateforme / Webview Méthode d'affichage Cookies persistants Polices web externes Exécution JavaScript Dimensions de la fenêtre Déclencheur du handshake de sortie
Apple iOS CNA (Websheet) Popup de mini-navigateur Bloqués (Détruits à la fermeture) Bloqués (Hors ligne) Limitée (Pas de localStorage/sessionStorage) Responsive (Largeur de l'appareil) Redirection HTTP pleine page uniquement [1]
Apple macOS CNA (Captive Network Assistant) Popup de mini-navigateur Bloqués Bloqués Limitée (Pas de boîtes de dialogue alert/confirm) Fixe (900px x 572px) Redirection HTTP pleine page uniquement
Android (Google) (CaptivePortalLogin) Notification Push -> Onglet personnalisé Chrome Autorisés (Partagés avec Chrome) Autorisés (Si mis sur liste blanche dans le walled garden) Complète Responsive Automatique (API Captive Portal / Vérification 204) [2]
Samsung Android (Samsung Internet) Notification Push -> Mini-navigateur Autorisés Autorisés Complète Responsive Automatique
Windows 10/11 (Navigateur par défaut) Lancement automatique du navigateur par défaut Autorisés (Contexte de navigateur complet) Autorisés Complète Responsive Manuel / Automatique

cna_constraints_comparison.png

Contourner le piège du bouton "Terminé" de l'Apple CNA

L'un des modes de défaillance les plus fréquents dans le développement de portails personnalisés est le "Piège du bouton Terminé" sur les appareils iOS. Lorsqu'un utilisateur s'authentifie, la webview iOS Websheet doit détecter que le réseau n'est plus captif. Elle le fait en surveillant le succès de ses requêtes canary en arrière-plan.

Crucialement, le CNA iOS ne déclenchera cette vérification que lors d'une navigation HTTP sur une page complète (redirection d'emplacement). Si un développeur conçoit une Single Page Application (SPA) moderne qui soumet des données de formulaire via un appel AJAX asynchrone (par exemple, fetch() ou Axios) et met à jour le DOM de manière dynamique sans modifier l'URL, le CNA ne réexécutera jamais sa vérification de connectivité. L'utilisateur sera authentifié au niveau de la passerelle, mais le bouton du CNA dans le coin supérieur droit restera sur « Annuler ». Si l'utilisateur frustré clique sur « Annuler », l'appareil iOS se dissociera immédiatement du SSID, mettant fin à la session WiFi [1].

Pour éviter cela, le gestionnaire de réussite de l'authentification doit effectuer une redirection de page complète vers une page de destination physique (par exemple, window.location.href = '/success') ou soumettre le formulaire de connexion de manière native via une action HTTP POST standard.

Guide d'implémentation

Pour garantir un rendu cohérent sur toutes les plateformes, les développeurs doivent passer d'une conception web moderne et lourde en ressources à un style de codage défensif et hautement autonome.

La règle d'or : Concevoir pour une connectivité Internet nulle

Pendant l'état captif, l'appareil client n'a aucun accès à l'Internet au sens large. Il ne peut résoudre et accéder qu'aux adresses IP et aux domaines explicitement autorisés dans le Walled Garden du contrôleur sans fil (comme l'IP du serveur du Captive Portal lui-même). Par conséquent, toute ressource externe référencée dans votre HTML ne parviendra pas à se charger, ce qui entraînera une mise en page cassée.

Pour concevoir de manière défensive, implémentez la Checklist de conception de Captive Portal Mobile-First suivante :

mobile_first_checklist.png

1. Configuration du Viewport

Pour empêcher les appareils mobiles de réduire le viewport à une largeur de bureau (généralement 980px), le `` HTML doit inclure une balise méta de viewport réactive. Sans cela, le texte et les champs de saisie apparaîtront microscopiques sur les appareils mobiles :


2. Intégration du CSS et suppression des dépendances externes

Ne liez jamais de fichiers CSS externes ou de CDN (par exemple, Bootstrap, Tailwind ou Google Fonts). Tout le CSS doit être intégré dans un bloc `

<div class="portal-card">
    <div class="logo-container">
        
        
            
            VOTRE MARQUE
        
    </div>
    
    <h1>Bienvenue sur le WiFi Invité</h1>
    <p>Veuillez saisir vos informations ci-dessous pour accéder à un internet sécurisé et haut débit.</p>
    
    
    
        <div class="form-group">
            Nom complet
            
        </div>
        
        <div class="form-group">
            Adresse e-mail
            
        </div>
        
        <div class="consent-group">
            
            
                J'accepte les <a href="#">Conditions d'utilisation</a> et consens au traitement de mes données conformément aux réglementations GDPR.
            
        </div>
        
        <div id="terms_box" class="terms-scrollbox">
            <strong>Conditions d'utilisation du WiFi :</strong><br />
            1. Ce service est fourni en l'état, sans garantie.<br />
            2. Les utilisateurs ne doivent pas se livrer à des activités illégales consommatrices de bande passante.<br />
            3. Les données personnelles sont collectées uniquement à des fins d'authentification et d'inscription marketing, conformément à notre Politique de confidentialité.
        </div>
        
        Se connecter au WiFi
    
    
    <div class="footer">
        Propulsé par Purple | Secure Guest WiFi
    </div>
</div>

## Dépannage et atténuation des risques

Lors du déploiement de portails captifs avec du code HTML/CSS personnalisé, les équipes opérationnelles informatiques sont fréquemment confrontées à plusieurs risques opérationnels majeurs :

### 1. La boucle d'avertissement de certificat SSL/TLS

Comme les portails captifs fonctionnent par interception de trafic, ils présentent un conflit fondamental avec la sécurité web HTTPS moderne. Lorsqu'un utilisateur tente de visiter un site HTTPS (par exemple, `https://www.google.com`) et que la passerelle tente de rediriger ce trafic vers un Captive Portal HTTP, le navigateur détecte une non-correspondance du certificat SSL et affiche un avertissement de sécurité critique "Votre connexion n'est pas privée".

* **Atténuation** : Ne tentez jamais d'intercepter directement le trafic HTTPS. Reposez-vous entièrement sur l'assistant CNA natif du système d'exploitation (qui effectue une requête HTTP non chiffrée pour déclencher la redirection). Assurez-vous que le domaine de votre Captive Portal dispose d'un certificat SSL valide et publiquement approuvé (par exemple, Let's Encrypt ou DigiCert) et qu'il est desservi via HTTPS *uniquement après* que la redirection HTTP initiale a réussi à diriger l'utilisateur vers le domaine de votre portail [2].

### 2. Échecs de résolution DNS (le piège du Walled Garden)

Si votre page HTML personnalisée fait référence à des ressources externes, telles qu'un point de terminaison OAuth de connexion sociale (par exemple, Facebook, Google) ou une passerelle de paiement, les requêtes DNS pour ces domaines échoueront à moins qu'elles ne soient explicitement autorisées dans le Walled Garden du contrôleur sans fil. Si un domaine est manquant dans la liste d'autorisation, le flux de connexion s'interrompra, affichant un écran vide.

* **Atténuation** : Maintenez une liste Walled Garden stricte et minimale. Si vous utilisez des connexions sociales, ajoutez à la liste d'autorisation les domaines génériques spécifiques recommandés par les fournisseurs d'identité (par exemple, `*.google.com`, `*.gstatic.com`). 

### 3. Vulnérabilités liées à l'expiration de session et à l'usurpation d'adresse MAC

Les portails captifs standards authentifient les appareils en fonction de leurs adresses MAC. Cependant, les systèmes d'exploitation mobiles modernes (iOS 14+ et Android 10+) utilisent par défaut des adresses MAC aléatoires (adresses WiFi privées), en les renouvelant périodiquement. Cela peut amener les invités à devoir se réauthentifier de manière répétée, ce qui nuit gravement à l'expérience utilisateur [1].

* **Atténuation** : Implémentez des délais d'expiration de session raisonnables (par exemple, 24 heures) sur le serveur RADIUS pour éviter les sessions obsolètes, et utilisez des normes d'authentification modernes telles que **Passpoint (Hotspot 2.0)** ou **WPA3-Enterprise** pour un accès transparent et sécurisé qui contourne entièrement les portails captifs basés sur l'adresse MAC.

## Pertinence du produit Purple : Développer vs. Acheter

Bien que le codage d'une simple page HTML soit simple, l'hébergement, la sécurisation et la mise à l'échelle d'une infrastructure de Captive Portal personnalisée présentent d'immenses obstacles techniques et de conformité. Le tableau ci-dessous compare les réalités techniques et opérationnelles de l'auto-hébergement d'un portail personnalisé par rapport à l'utilisation de la plateforme d'entreprise gérée de Purple :

| Fonctionnalité / Exigence opérationnelle | Portail personnalisé auto-hébergé | Plateforme Purple Enterprise WiFi |
| :--- | :--- | :--- |
| **Personnalisation HTML/CSS** | Codage entièrement manuel, téléchargement de fichiers sur des points d'accès individuels ou des serveurs web locaux. | **Éditeur développeur au pixel près** permettant des injections HTML/CSS personnalisées, combiné à un constructeur visuel par glisser-déposer.
| **Infrastructure RADIUS** | Nécessite de déployer, configurer et maintenir des serveurs FreeRADIUS ou Cloud RADIUS hautement disponibles [4]. | **RADIUS natif du cloud, intégré et distribué mondialement** avec redondance actif-actif et SLA de disponibilité de 99,99 %.
| **Prise en charge des points d'accès multi-constructeurs** | Scripts d'intégration personnalisés requis pour chaque constructeur de matériel (Cisco, Aruba, Meraki, Ruckus) [5]. | **Intégration native et prête à l'emploi** avec plus de 200 modèles de matériel ; déploiement de portail unifié sur des parcs de matériels mixtes.
| **Confidentialité des données et conformité** | Le site assume 100 % de la responsabilité juridique pour la conformité GDPR, CCPA et PCI DSS, y compris le chiffrement sécurisé des bases de données et les flux de suppression des données. | **Entièrement conforme dès la conception**. Gestion intégrée des consentements, demandes automatisées de suppression des données des personnes concernées et hébergement sécurisé certifié ISO 27001.
| **Analytics &amp; Marketing** | Nécessite la création de pipelines d'ingestion de données personnalisés et l'intégration d'outils marketing tiers. | **Tableau de bord analytique de classe entreprise** avec suivi de la fréquentation en temps réel, indicateurs de taux de retour et déclencheurs de campagnes marketing automatisés [6].
| **Intégrations de fournisseurs d'identité** | Intégrations manuelles OAuth2 avec Google, Facebook, Apple et les passerelles SMS locales. | **Intégrations en un clic** avec les principales plateformes sociales, les passerelles SMS et Azure AD / Okta pour les invités de l'entreprise.

La plateforme de Purple résout le dilemme « Build vs. Buy ». Elle offre aux développeurs la liberté créative totale d'un espace de travail HTML/CSS personnalisé tout en éliminant l'ingénierie d'infrastructure backend complexe et à haut risque requise pour prendre en charge l'authentification RADIUS sécurisée à grande échelle.

## ROI et impact commercial

Investir dans un Captive Portal personnalisé, réactif et conçu par des professionnels offre des rendements quantifiables dans l'ensemble des opérations informatiques, du marketing et de la conformité légale.

### 1. Réduction des coûts opérationnels (tickets d'assistance informatique)

Dans les déploiements à grande échelle, comme un stade ou une chaîne de vente au détail multisite, un Captive Portal défaillant est l'un des principaux facteurs d'escalade des tickets d'assistance informatique. Lorsque les invités sont confrontés à un « écran blanc » ou à un bouton de connexion qui ne répond pas, ils submergent le personnel sur place ou soumettent des tickets d'assistance.

$$\text{Économies annuelles sur l'assistance} = (\text{Nombre total de visites annuelles d'invités} \times \text{Taux d'échec du portail} \times \text{Taux de contact avec l'assistance}) \times \text{Coût par ticket d'assistance}$$

* **Scénario** : Un centre de congrès accueillant 1 000 000 de visiteurs par an. Un portail mal codé présente un taux d'échec de 5 % sur les anciens appareils iOS, ce qui entraîne un taux de contact avec l'assistance de 10 %. Au tarif standard de l'industrie de 15 $ par ticket d'assistance, le coût opérationnel est de :
  $$(1 000 000 \times 0,05 \times 0,10) \times \$15 = \$75 000 \text{ par an en frais d'assistance évitables}$$
* **Résultat** : La transition vers un modèle optimisé pour les CNA et conçu pour le mobile réduit le taux d'échec du portail à &lt;0,1 %, éliminant ainsi pratiquement cette charge opérationnelle.

### 2. Capture de données marketing et optimisation de l'opt-in

Pour les commerces de détail et les établissements hôteliers, le portail WiFi des invités est le principal mécanisme de capture de données clients de première main propres. Une interface utilisateur mal conçue avec un texte microscopique ou une disposition de formulaire fastidieuse entraîne des **taux de rebond** élevés — les utilisateurs abandonnent complètement le processus de connexion, ce qui se traduit par des opportunités marketing perdues.

* **Étude de cas (Vente au détail)** : Une chaîne nationale de vente au détail a mis en œuvre un Captive Portal optimisé pour le mobile à l'aide de la plateforme de Purple. En remplaçant un formulaire de connexion en plusieurs étapes par un champ de saisie d'e-mail unique (taille de police : 16px) et un bouton d'action optimisé de 48px, elle a constaté une **augmentation de 42 % des inscriptions finalisées** et une **augmentation de 28 % des inscriptions à la newsletter marketing** au cours du premier trimestre [6].

### 3. Atténuation des risques juridiques et réglementaires

Sous le coup du GDPR et de la CCPA, une collecte de données non conforme entraîne de lourdes sanctions financières (jusqu'à 4 % du chiffre d'affaires annuel mondial sous le GDPR). S'en remettre à des cases pré-cochées ou ne pas fournir de politique de confidentialité claire et facilement accessible sur votre splash page expose l'entreprise à une immense responsabilité juridique.

* **ROI de l'atténuation des risques** : L'implémentation d'une case de consentement explicite et non cochée par défaut, ainsi que l'hébergement des conditions d'utilisation dans une zone de défilement optimisée, garantissent une conformité réglementaire à 100 %, atténuant ainsi le risque d'amendes réglementaires de plusieurs millions de dollars et protégeant la réputation de la marque.

## Résumé des points clés

* **Le Sandbox CNA est restrictif** : Le Websheet iOS d'Apple et le CNA macOS sont des environnements hautement sécurisés (sandboxed) qui bloquent les ressources externes, les cookies et les polices web. Tous les styles et ressources doivent être autonomes (CSS en ligne, images Base64, polices système) [1].
* **L'AJAX rompt la négociation de sortie d'iOS** : Pour faire passer avec succès l'appareil iOS de l'état « captif » à l'état « connecté » (en changeant le bouton en haut à droite de « Annuler » à « Terminé »), vous devez déclencher une redirection HTTP complète de la page. Les mises à jour asynchrones du DOM laisseront l'appareil dans une boucle captive.
* **Le Mobile-First est obligatoire** : Plus de 90 % des connexions s'effectuent sur mobile. Concevez une mise en page sur une seule colonne (largeur max : 480px), utilisez des cibles tactiles adaptées aux doigts (minimum 44px x 44px) et imposez une taille de police minimale de 16px sur tous les champs de saisie de texte pour éviter le zoom automatique du navigateur iOS.
* **Les Walled Gardens contrôlent le DNS** : Tout domaine externe référencé lors de la connexion (par exemple, les API de connexion sociale) doit être explicitement autorisé dans la liste blanche (walled garden) du contrôleur sans fil, sous peine de voir la page ne pas se charger.
* **Purple élimine la complexité du backend** : L'utilisation du créateur de portail de Purple offre aux développeurs un contrôle HTML/CSS complet via un éditeur personnalisé, tout en les déchargeant des lourdes charges de sécurité, de mise à l'échelle et de conformité liées à RADIUS, aux intégrations d'AP multi-constructeurs et à la gestion de bases de données conformes au GDPR [3].

## Références

* [1] [Wireless Broadband Alliance: Captive Network Portal Behavior](https://captivebehavior.wballiance.com/)
* [2] [Android Open Source Project: Captive Portal Login Webview Integration](https://source.android.com/docs/core/connect/android-custom-tabs-captive-portal)
* [3] [European Data Protection Board: Guidelines on Consent under Regulation 2016/679](https://edpb.europa.eu/our-work-tools/our-documents/guidelines/guidelines-052020-consent-under-regulation-2016679_en)
* [4] [Comment implémenter l'authentification 802.1X avec Cloud RADIUS](/guides/implementing-8021x-with-cloud-radius)
* [5] [Cisco Wireless APs: Guide 2026 des produits et du déploiement](/blog/cisco-wireless-ap)
* [6] [Plateforme de Marketing &amp; Analytics Purple WiFi](/guest-wifi-marketing-analytics-platform)

---

## Écouter le briefing technique

Écoutez un architecte de solutions senior aborder les contraintes techniques et les stratégies d'implémentation pour les portails captifs personnalisés :

Définitions clés

Captive Portal

Une page web qui s'affiche pour les utilisateurs nouvellement connectés à un réseau Wi-Fi avant qu'un accès plus large aux ressources du réseau ne leur soit accordé, généralement utilisée pour l'authentification, le paiement ou l'affichage des conditions d'utilisation.

Les équipes informatiques déploient des portails captifs au niveau de la passerelle pour contrôler l'accès des invités, capturer les données des utilisateurs et assurer la conformité légale.

Captive Network Assistant (CNA)

Un mini-navigateur hautement restreint et isolé (sandbox) lancé automatiquement par les systèmes d'exploitation (tels qu'Apple iOS et macOS) lors de la détection d'une redirection de réseau captif, conçu uniquement pour faciliter l'authentification sur le portail.

Les webviews CNA imposent des restrictions strictes, notamment le blocage des CDN externes, des cookies persistants et du stockage local, ce qui perturbe fréquemment les conceptions web standard.

Walled Garden

Une liste restreinte d'adresses IP, de sous-réseaux ou de noms de domaine qu'un utilisateur invité non authentifié est autorisé à consulter via la passerelle avant de terminer le processus de connexion au Captive Portal.

Les développeurs doivent s'assurer que toute ressource externe (telle que les API de connexion sociale ou les passerelles de paiement) est inscrite sur liste blanche dans le walled garden afin d'éviter que le flux de connexion ne se bloque.

Encodage Base64

Un schéma de codage binaire-texte qui représente des données binaires (telles que des images) sous forme de chaîne ASCII, permettant d'intégrer des éléments directement dans des documents HTML ou CSS.

L'utilisation de l'encodage Base64 pour les logos et les icônes élimine les requêtes HTTP externes, garantissant que les éléments s'affichent parfaitement dans les environnements CNA hors ligne.

RADIUS (Remote Authentication Dial-In User Service)

Un protocole réseau qui fournit une gestion centralisée de l'authentification, de l'autorisation et de la comptabilisation (AAA) pour les utilisateurs qui se connectent et utilisent un service réseau.

Le serveur du Captive Portal communique avec un serveur RADIUS pour autoriser l'adresse MAC de l'invité au niveau de la passerelle réseau une fois que les critères d'authentification sont remplis.

System Font Stack

Une déclaration CSS font-family qui donne la priorité aux polices préinstallées du système d'exploitation (telles que San Francisco sur iOS, Segoe UI sur Windows et Roboto sur Android) par rapport aux polices web externes.

L'implémentation d'un system font stack garantit un rendu typographique immédiat sans déclencher de requêtes HTTP externes bloquées vers des services comme Google Fonts.

Canary URL

Une URL HTTP dédiée et non cryptée, gérée par les fournisseurs de systèmes d'exploitation (par exemple, captive.apple.com), pour tester si un appareil dispose d'une connectivité Internet illimitée.

Le gestionnaire de réseau en arrière-plan de l'OS vérifie cette URL pour détecter la présence d'un Captive Portal et déclencher la fenêtre contextuelle de la webview CNA.

Passpoint (Hotspot 2.0)

Une norme de l'industrie développée par la Wi-Fi Alliance qui permet aux appareils mobiles de découvrir automatiquement et de s'authentifier de manière sécurisée auprès des points d'accès Wi-Fi, en évitant les connexions manuelles aux portails captifs.

Les entreprises utilisent Passpoint aux côtés de plateformes comme Purple pour faire passer les invités de pages de connexion fastidieuses à des expériences d'itinérance sécurisées et fluides, similaires au réseau cellulaire.

Exemples concrets

Une chaîne d'hôtels de luxe de 250 chambres [Hospitality](/industries/hospitality) souhaite mettre en œuvre une page de connexion WiFi invité personnalisée qui correspond parfaitement à sa charte graphique haut de gamme. Leur agence de création a conçu une splash page utilisant une typographie de marque personnalisée (hébergée sur Adobe Fonts), plusieurs images d'arrière-plan haute résolution (hébergées sur un compartiment public AWS S3) et un assistant JavaScript animé en plusieurs étapes. Lors du déploiement, les invités sur iOS se connectent au SSID, mais le portail s'affiche sous la forme d'un écran blanc vide et les utilisateurs ne peuvent pas s'authentifier.

Pour résoudre l'écran blanc et la charte graphique défectueuse, nous devons restructurer l'architecture frontend du portail afin de respecter les contraintes du sandbox Apple CNA :

  1. Correction de la typographie : Comme Adobe Fonts nécessite une requête HTTP externe qui est bloquée par le CNA, nous remplaçons l'appel de police personnalisée par une pile de polices système natives et haut de gamme (font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;). Cela garantit un rendu instantané sans appels réseau externes.
  2. Optimisation des ressources : Les images d'arrière-plan sur AWS S3 sont bloquées car S3 ne figure pas dans le walled garden de la passerelle. Nous compressons le logo principal de la marque, le convertissons en un SVG léger et l'encodons directement dans le HTML sous forme d'URI de données Base64. Pour l'arrière-plan, nous remplaçons les images lourdes par un dégradé CSS propre et réactif utilisant les couleurs de la marque de l'hôtel, réduisant ainsi considérablement le poids de la page.
  3. Simplification du JavaScript : L'assistant animé en plusieurs étapes repose sur des bibliothèques externes jQuery et GSAP. Nous supprimons ces dépendances externes et refactorisons le formulaire dans une structure HTML sur une seule page et une seule colonne. La validation du formulaire est réécrite en JavaScript natif et léger.
  4. Handshake d'authentification : La soumission du formulaire est modifiée d'une soumission basée sur AJAX à un formulaire HTML natif <form action="/submit" method="POST"> pour déclencher une redirection de page complète, permettant au Websheet iOS d'exécuter sa vérification canary et d'afficher le bouton 'Terminé'.
Commentaire de l'examinateur : Ce scénario représente le conflit classique entre une conception créative haut de gamme et les contraintes de sécurité rigides des webviews captifs. Les agences de création traitent souvent le Captive Portal comme un site web de bureau standard. Cependant, l'appareil étant dans un état pré-authentifié, le réseau bloque tout le trafic externe. En intégrant le CSS, en utilisant des polices système, en encodant les ressources en Base64 et en utilisant des soumissions de formulaires natives, nous préservons l'esthétique haut de gamme de la marque tout en garantissant une fiabilité opérationnelle à 100 % sur les appareils iOS et Android.

Une chaîne nationale de vente au détail [Retail](/industries/retail) comptant 450 magasins souhaite capturer les e-mails des invités via des splash pages WiFi pour alimenter son CRM. Elle exige que les invités s'inscrivent aux newsletters marketing. La conception initiale comporte une case à cocher pré-cochée « J'accepte de recevoir des e-mails marketing ». De plus, le portail est hébergé sur un seul serveur local à leur siège social. Pendant les heures de pointe (le samedi après-midi), les invités de tout le pays subissent des retards importants et beaucoup ne parviennent pas à charger la page de connexion, ce qui entraîne une baisse massive des taux de capture de données.

Nous devons remédier à la fois à la violation de la conformité et au goulot d'étranglement de l'infrastructure :

  1. Correction de la conformité : En vertu du GDPR et de la CCPA, les cases de consentement pré-cochées sont illégales. Nous modifions le HTML pour que la case de consentement marketing soit décochée par défaut (<input type="checkbox" id="marketing_consent">). Nous ajoutons également une case à cocher obligatoire distincte pour les conditions d'utilisation afin de dissocier l'accord juridique de l'inscription marketing.
  2. Évolutivité de l'infrastructure : L'hébergement d'un Captive Portal national sur un seul serveur centralisé crée un point de défaillance unique et un goulot d'étranglement massif en matière de latence. Nous migrons le frontend du portail vers un réseau de diffusion de contenu (CDN) hautement disponible et distribué à l'échelle mondiale avec mise en cache en périphérie (edge-caching).
  3. Intégration RADIUS : Nous configurons les points d'accès des magasins locaux pour qu'ils pointent vers un cluster RADIUS cloud-native avec redondance active-active, garantissant que les demandes d'authentification sont traitées localement en périphérie avec une latence inférieure à 50 ms, même pendant le trafic de pointe du samedi.
  4. Migration vers Purple : Pour éliminer toute cette charge d'ingénierie, le détaillant migre vers Purple. Les outils de consentement GDPR intégrés de Purple gèrent automatiquement les inscriptions conformes, et leur infrastructure cloud distribuée à l'échelle mondiale gère des millions d'authentifications quotidiennes avec un taux de disponibilité de 99,99 %, résolvant ainsi complètement le goulot d'étranglement de l'évolutivité.
Commentaire de l'examinateur : Les cases de consentement pré-cochées représentent un risque de conformité grave qui peut entraîner des amendes réglementaires massives. Dissocier le consentement marketing des conditions d'utilisation est une bonne pratique technique et juridique. Du côté de l'infrastructure, l'hébergement centralisé des portails captifs est un anti-pattern. Une présence nationale de vente au détail nécessite un frontend décentralisé avec mise en cache en périphérie, combiné à un backend RADIUS cloud-native. Migrer vers une plateforme gérée comme Purple élimine cette complexité architecturale, permettant au détaillant de se concentrer sur les campagnes marketing plutôt que sur l'évolutivité de la base de données.

Questions d'entraînement

Q1. Une équipe informatique d'un grand aéroport international [Transport](/industries/transport) déploie un Captive Portal codé sur mesure. Elle constate que si les utilisateurs d'Android se connectent de manière fluide, une partie importante des utilisateurs d'iOS rencontre un problème : ils s'authentifient avec succès mais ne peuvent pas naviguer sur le web. En y regardant de plus près, les appareils iOS indiquent qu'ils sont connectés au SSID, mais le bouton en haut à droite de la fenêtre contextuelle captive affiche toujours « Annuler » au lieu de « Terminé ». Quelle est la cause profonde de ce problème et comment le développeur doit-il le résoudre ?

Conseil : Analysez comment l'assistant CNA d'Apple détecte qu'un réseau est passé de l'état captif à l'état authentifié, et quelle action du navigateur est requise pour déclencher cette vérification.

Voir la réponse type

La cause profonde est que la page de réussite du portail met à jour l'interface utilisateur de manière dynamique via JavaScript (routage AJAX/SPA) plutôt que d'effectuer une navigation HTTP complète. Le mini-navigateur de l'assistant réseau captif (CNA) d'Apple iOS ne réexécute sa vérification de connectivité en arrière-plan (la requête canary vers captive.apple.com) que lorsqu'une redirection d'URL ou une navigation de page complète se produit. Si le développeur soumet le formulaire de connexion via AJAX et affiche simplement un message de « Réussite » dans le DOM, le CNA ne sait pas que le réseau a été déverrouillé. Par conséquent, le bouton en haut à droite reste sur « Annuler ». Si l'utilisateur clique sur « Annuler » pour quitter, le système d'exploitation suppose que la connexion a échoué et se déconnecte du réseau WiFi.

Solution : Le développeur doit modifier le gestionnaire de réussite de l'authentification pour forcer une redirection de page complète. Cela peut être réalisé en soumettant le formulaire de connexion de manière native via une balise HTML standard <form action="/submit" method="POST"> ou en exécutant window.location.href = '/success_landing_page' en JavaScript une fois que l'API renvoie une réponse d'authentification réussie. Cela déclenche le chargement complet de la page requis, forçant l'assistant CNA à réévaluer l'état du réseau, à vérifier que l'URL canary est désormais accessible et à remplacer le bouton en haut à droite par « Terminé ».

Q2. Une équipe d'exploitation de stade [Events] souhaite lancer un réseau WiFi invité qui collecte des inscriptions marketing. Le responsable de la conformité insiste sur le fait que le portail doit être 100 % conforme au GDPR. L'équipe de développement présente une maquette où le formulaire de connexion comporte une case pré-cochée indiquant « J'accepte les conditions d'utilisation et je consens à recevoir des newsletters marketing ». Pourquoi cette conception n'est-elle pas conforme, et comment la structure HTML/CSS et du formulaire doit-elle être remaniée pour satisfaire au GDPR tout en maintenant un taux de conversion élevé ?

Conseil : Prenez en compte les exigences strictes du GDPR concernant le consentement explicite, la dissociation des inscriptions marketing des conditions d'utilisation, et la visibilité physique des textes juridiques sur les écrans mobiles.

Voir la réponse type

La conception proposée enfreint le GDPR sur deux aspects majeurs : premièrement, les cases pré-cochées ne constituent pas un consentement valide, qui doit être donné librement, de manière spécifique, éclairée et univoque. Deuxièmement, le fait de lier le consentement marketing à l'acceptation des conditions d'utilisation n'est pas conforme ; un utilisateur ne peut pas être contraint d'accepter des e-mails marketing comme condition d'utilisation du service WiFi.

Stratégie de refactorisation :

  1. Dissocier le consentement : Séparez la case à cocher en deux cases distinctes. La case A est obligatoire et concerne les conditions d'utilisation et la politique de confidentialité. La case B est facultative et concerne l'inscription à la newsletter marketing.
  2. Définir sur non cochée : Assurez-vous que les deux cases sont décochées par défaut dans le HTML (attribut checked omis).
  3. Visibilité CSS : Étant donné que plus de 90 % des utilisateurs sont sur mobile, placez les cases à cocher directement au-dessus du bouton « Se connecter » afin qu'elles soient visibles au-dessus de la ligne de flottaison sans défilement. Utilisez une pile de polices système et définissez la taille de la police du libellé à 14px avec une hauteur de ligne de 1.4 pour une lisibilité optimale.
  4. Zone de défilement des conditions : Pour éviter que le texte juridique ne repousse les éléments du formulaire hors de l'écran, placez les conditions d'utilisation détaillées dans un conteneur déroulant avec une hauteur fixe (max-height: 100px; overflow-y: auto; background-color: #F5F1ED; border: 1px solid #D1D5DB; border-radius: 6px;) qui peut être ouvert ou fermé via un lien texte. Cela permet de conserver une mise en page épurée et performante tout en garantissant une conformité juridique absolue.

Q3. Une chaîne de magasins [Retail](/industries/retail) déploie une page d'accueil personnalisée dans 100 points de vente. Le concepteur a utilisé Google Fonts (Montserrat) et a intégré un lien vers une feuille de style Bootstrap hébergée sur un CDN dans l'en-tête HTML. Lors des tests sur un réseau d'entreprise, la page s'affiche parfaitement. Cependant, lorsqu'elle est déployée sur un point d'accès de test en magasin avec une configuration de réseau captif, la page s'affiche avec du texte Times New Roman sans style, un alignement déstructuré et des icônes manquantes. Pourquoi cela se produit-il et comment les ressources doivent-elles être remaniées ?

Conseil : Analysez l'état de la connexion réseau avant qu'un utilisateur ne soit authentifié, et déterminez comment le navigateur gère les requêtes HTTP externes vers des domaines situés en dehors du walled garden.

Voir la réponse type

Cet échec se produit parce que l'appareil est dans un état captif non authentifié lorsque la page d'accueil est chargée. Dans cet état, la passerelle sans fil bloque tout le trafic internet sortant, n'autorisant que les requêtes vers les domaines explicitement autorisés dans le Walled Garden de la passerelle. Étant donné que les domaines CDN pour Bootstrap (cdn.jsdelivr.net) et Google Fonts (fonts.googleapis.com) ne sont pas autorisés, les requêtes du navigateur pour récupérer la feuille de style et les fichiers de polices échouent silencieusement. Par conséquent, le navigateur se rabat sur son moteur de rendu par défaut, ce qui produit un HTML sans style (texte Times New Roman) et des mises en page cassées.

Stratégie de refactorisation :

  1. CSS intégré (Inline) : Supprimez le lien externe vers la feuille de style Bootstrap. Copiez les règles CSS grid/flexbox nécessaires directement dans un bloc <style> dans l'en-tête HTML <head>. Cela garantit que toutes les instructions de mise en page sont fournies dans le chargement initial de la page unique.
  2. Implémenter une pile de polices système : Supprimez l'appel Google Fonts @import ou <link>. Remplacez-le par une pile de polices système native dans le CSS (font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;). Cela force l'appareil à utiliser des polices de haute qualité déjà préinstallées sur le système d'exploitation, éliminant ainsi complètement la dépendance au réseau externe.
  3. Encoder les icônes/logos en Base64 : Si la mise en page repose sur des images externes ou des bibliothèques d'icônes (comme FontAwesome), convertissez ces icônes au format SVG et intégrez-les directement dans le HTML ou sous forme d'URI de données Base64 dans le CSS. Cela garantit que la page est 100 % autonome et s'affiche parfaitement, même sans aucune connectivité internet.

Continuer la lecture de cette série

How to Set Up a Captive Portal on Starlink: A Guide for Remote & Maritime Venues

Ce guide explique comment contourner le matériel Starlink natif et intégrer un Captive Portal géré dans le cloud à l'aide d'équipements de routage d'entreprise. Vous apprendrez à surmonter la limitation du CGNAT, à appliquer la segmentation VLAN, à gérer les contraintes de bande passante par satellite et à garantir la conformité réglementaire.

Lire le guide →

Bonnes pratiques du Captive Portal : conception pour une conversion élevée et la conformité

Ce guide technique offre aux responsables informatiques, architectes réseau et directeurs d'exploitation de sites un plan complet pour déployer des captive portals équilibrant sécurité réseau et taux de conversion élevé. Il couvre l'ensemble de l'architecture, de la segmentation VLAN et l'authentification RADIUS à la conception de consentements conformes au GDPR et à la sélection des méthodes d'authentification. Issu de l'expérience opérationnelle de Purple sur plus de 80 000 sites et 440 millions de connexions en 2024, chaque recommandation est ancrée dans des données de déploiement réelles.

Lire le guide →

Comment optimiser les Captive Portals pour une sécurité réseau maximale et une conversion utilisateur optimale

Ce guide fournit un plan technique complet pour optimiser les Captive Portals au sein des entreprises, couvrant l'architecture de segmentation réseau, la sélection des méthodes d'authentification, la conception de formulaires de consentement conformes au GDPR et l'optimisation de la conversion. Il s'adresse aux responsables informatiques, architectes réseau et CTO d'hôtels, de chaînes de magasins, de stades et d'organisations du secteur public qui doivent concilier la sécurité réseau et la collecte de données de première partie. Purple gère l'infrastructure de Captive Portals de plus de 80 000 sites avec 440 millions de connexions en 2024, et les cadres présentés ici reflètent cette expérience opérationnelle.

Lire le guide →