J'ai récemment participé à une discussion sur ce qui se passe lorsqu'un client demande une page à un serveur proxy. Je voulais juste m'assurer que ma compréhension de cette séquence d'événements était correcte dans le cas général:
Toute rétroaction serait très appréciée.
Pas exactement: cela dépend de la configuration du client. Prenons IE comme exemple de base.
Si vous configurez IE avec un proxy explicite : par exemple aucune autre option cochée, proxy mis à quelque chose: 8080.
L'utilisateur tape une adresse
IE vérifie l'adresse pour un correspondance de chaîne avec la IE (c'est-à-dire "Contourner le proxy pour ces adresses:"))
une. S'il correspond à une entrée de la liste Contournement , le client utilise son propre DNS pour résoudre le nom, puis le le client se connecte directement à l'adresse IP cible sur le port 80 (supposé), puis envoie une demande comme:
GET /something.htm HTTP/1.1
Host: fulldomainame.example.com
b. Si aucune entrée de liste de contournement ne correspond, continuez:
IE se connecte à son proxy configuré, et envoie une requête du formulaire:
GET http://fulldomainname.example.com/something.htm HTTP/1.1
Factoid bonus: cette utilisation du FQDN dans l'URL est une façon de dire qu'un client pense c'est parler à un proxy au lieu d'un vrai serveur web
Le proxy résout ce nom d'hôte en utilisant son propre DNS, puis se connecte au site cible (agit comme le client à l'étape 2 ci-dessus), etc., etc.
Lors de l'utilisation de WPAD/PAC:
Dans le cas de l'utilisation d'un script Web Proxy Auto Discovery (WPAD) ou Proxy Auto Configuration (PAC ou Autoconfig), tels que ceux fournis par ISA/TMG lorsque l'autoconfiguration est activée, c'est différent:
L'utilisateur tape une adresse
Client téléchargements le fichier wpad.dat/autoproxy.js/.pac actuel depuis son emplacement configuré
Le client recherche la fonction "FindProxyForUrl" dans le fichier js et l'exécute
Le script Autoproxy traite les hostname et URL . Il s'agit d'un fichier javascript à fonctions limitées, mais beaucoup de choses sont encore possibles:
une. cela peut inclure résolution de nom (IsInNet, DnsResolve)
b. cela peut inclure correspondance de chaîne (ShExpMatch)
c. cela peut inclure en comptant jusqu'à un million (i ++)
ré. cela peut inclure messages popup d'alerte narky si l'administrateur est un imbécile
La fonction FindProxyForUrl renvoie au moins une chaîne: une liste ordonnée des meilleurs proxys à utiliser (séparés par des points-virgules)
une. soit "DIRECT", auquel cas le client doit alors résoudre le nom lui-même et se connecter directement, comme dans le cas de contournement ci-dessus
b. ou "PROXY proxyname: 8080" ou similaire, auquel cas le client se connecte à ce port sur ce proxy, lui indique GET l'URL complète, et le le proxy effectue la résolution des noms.
Il y a parfois des problèmes, des subtilités et des comportements inexpliqués, mais pour la plupart lorsque les choses ne sont pas brisées de manière étrange et intéressante, ce qui précède est la façon dont je l'ai vu fonctionner pendant de nombreuses années. Les nouveaux navigateurs optimisent le comportement, parallélisent les choses et essaient constamment des choses intéressantes, alors consultez les documents les plus récents de votre navigateur pour comprendre les détails.
WinSock Proxy/ISA Firewall Client/TMG Client:
Si vous êtes intéressé par le client proxy Winsock (de TMG/ISA Server), c'est une autre histoire, avec plus de flexibilité et de pièces mobiles. Trop de détails ici, mais il existe des documents qui décrivent comment cela fonctionne. En bref: il se connecte aux sockets Windows et peut intercepter à la fois le trafic basé sur TCP/UDP et les demandes de résolution de noms par application et par utilisateur. Très puissant, mais aussi obsolète maintenant, et n'a pas été mis à jour depuis plusieurs années.
Les clients peuvent être vraiment collants:
One note finale: Une fois qu'un client HTTP a décidé de parler à un proxy pour un site/URL donné, il n'y a aucun moyen pour le proxy de lui dire de ne pas le faire.
Il n'y a pas de code d'état HTTP ni d'en-tête pour "Je ne sers pas cela, vous devriez simplement y aller directement à la place" ...
Une fois que le client décide qu'une URL particulière est servie par proxy, proxy-death-grip s'ensuit.
La seule façon de l'éviter est d'obtenir la logique de sélection juste avant que le client ne se connecte, dans la liste PAC ou Bypass.
ne note finale sur les zones et les fichiers PAC
IE traite les sites qui sont [~ # ~] directs [~ # ~] connectés - même s'ils ont des points dans l'URL - pour faire partie du Zone Intranet locale (par défaut - paramétrable dans les propriétés de la zone), et ainsi fera des choses comme permettre l'authentification Windows intégrée à ces sites (c'est-à-dire l'authentification Kerberos et/ou NTLM, de manière transparente). Ainsi, contrôler si quelque chose se trouve dans la zone Intranet local définit la fiabilité de l'authentification en termes d'authentification automatique. Encore une fois, au moins, par défaut.
Je ne pense pas que ce soit le cas - si vous tapez l'IP et les domaines dans la liste d'exceptions, ou le domaine, et que l'IP est dans la liste d'exceptions, cela passera probablement toujours par le proxy.
Il est possible qu'un proxy.pac/wpad.dat vous permette de vous éloigner de ce comportement.
Je ne suis pas sûr que votre partie DNS soit correcte. J'ai vu une machine sans serveur DNS valide récupérer des pages dans IE très bien en utilisant un proxy.
J'essaie dans Ubuntu 10.04, Wine, IE 6.0 et Squid 2.7 (le système a un DNS et Squid a un autre serveur DNS)
IE 6.0 ne résout pas le nom DNS.