La détection HTTPS vs HTTP sur le serveur de l'envoi de retour rien d'utile
Donc très similaires à "Détecter les requêtes https php":
Voulez avoir https://example.com/pog.php aller à http://example.com/pog.php ou même vice-versa.
Problèmes:
- Ne peut pas lire quoi que ce soit à partir de $_SERVER["HTTPS"], puisqu'il n'est pas là
- Serveur envoie les deux requêtes sur le port 80, ne peut donc pas vérifier 443 sur la version HTTPS
apache_request_headers()
etapache_response_headers()
reviennent à la même chose- Ne pouvez pas dire le loadbalancer rien ou envoyer supplémentaire somethings
- Serveur de données de retour d'expérience recraché par la page sur les deux appels d'URL est exactement le même pour enregistrer l'ID de session. La poisse.
Y a sur la page des moyens pour détecter si on l'appelle via SSL ou non-SSL?
Modifier: $_SERVER["HTTPS"]
n'est pas là, allumé ou pas, peu importe si vous êtes à la recherche de sites via SSL ou non-SSL. Pour une raison quelconque, l'hébergement a choisi pour répondre à toutes les requêtes HTTPS cryptée, mais vers le bas le port 80. Et ainsi donc, les $_SERVER["HTTPS"]
n'est jamais sur, pas là, pas seulement une rétroaction utile sur ce serveur point. Si ce paramètre est toujours vide.
(Et oui, ça veut dire qu'il se battant pavillon dire FF ou Chrome pour une partie de certificat SSL invalide. Mais cette partie n'a pas d'importance.)
Aussi, le plus qui peut être obtenu à partir de la détection de l'URL est jusqu'au point de barres obliques. Le PHP ne peut pas voir si la demande a https
ou http
à l'avant.
OriginalL'auteur random | 2009-02-16
Vous devez vous connecter pour publier un commentaire.
Mot-Clé -- Équilibrage De La Charge De
Le problème se résume au fait que le programme d'équilibrage de charge de la manipulation de SSL de cryptage/décryptage et il est totalement transparent pour le serveur web.
La vraie question ici est: "vous avez le contrôle sur l'équilibrage de la charge de la configuration?"
Si vous le faites, il ya un couple de façons de le gérer. Configurer l'équilibrage de charge pour avoir séparé les définitions de service pour HTTP et HTTPS. Puis envoyer le trafic HTTP sur le port 80 du serveur web, et le trafic HTTPS pour le port 81 des serveurs web. (le port 81 n'est pas utilisé par tout le reste).
Dans apache, configurer les différents serveurs virtuels:
Ensuite, la variable d'environnement
USING_HTTPS
sera soit1
|0
, en fonction de l'hôte virtuel ramassé. Qui sera disponible dans le$_SERVER
tableau en PHP. N'est-ce pas cool?Si vous n'avez pas accès à la configuration de Équilibreur de Charge, alors les choses sont un peu plus compliqué. Il n'y aura pas un moyen de définitivement savoir si vous utilisez le protocole HTTP ou HTTPS, parce que les protocoles HTTP et HTTPS sont protocoles. Ils précisent la façon de se connecter et de ce format pour envoyer des informations à travers, mais dans les deux cas, vous êtes à l'aide de HTTP 1.1 pour faire la demande. Il n'y a pas d'information dans la demande réelle de dire si c'est HTTP ou HTTPS.
Mais ne vous découragez pas. Il y a quelques idées.
La 6ème paramètre de PHP
setcookie()
fonction peut demander à un client d'envoyer le cookie UNIQUEMENT sur les connexions HTTPS (http://www.php.net/setcookie). Peut-être vous pouvez définir un cookie avec ce paramètre, puis de vérifier sur d'autres demandes?Une autre possibilité serait d'utiliser le JavaScript pour mettre à jour les liens sur chaque page selon le protocole (ajout d'un paramètre GET).
(ni de la ci-dessus serait de preuve de balle)
Un autre pragmatique option serait d'obtenir votre SSL sur un domaine différent, comme
secure.foo.com
. Ensuite, vous pouvez recourir à la VirtualHost astuce ci-dessus.Je sais que ce n'est pas la question la plus facile parce que je traite avec lui au cours de la journée (charge équilibrée cluster web derrière un Cisco CSS équilibreur de charge avec SSL module).
Enfin, vous pouvez toujours prendre le point de vue que votre application web doit basculer en mode SSL lorsque cela est nécessaire, et que la confiance des utilisateurs de ne PAS revenir (après tout, c'est leurs données sur la ligne (en général)).
Espère que cela aide un peu.
OriginalL'auteur gahooa
Vous devez vous assurer que le fournisseur a la ligne suivante dans le VHOST entrée pour votre site:
SSLOptions +StdEnvVars
. Cette ligne indique à Apache d'inclure le protocole SSL variables dans l'environnement de vos scripts (PHP).OriginalL'auteur nabrond