J'essaie de faire en sorte que la détection automatique de proxy fonctionne sur un réseau, et cela fonctionne correctement pour tous les navigateurs, y compris IE, mais Windows Update ne fonctionnera pas.
J'ai configuré un serveur Web pour desservir le même fichier WPAD à partir de: http://wpad.ourdomain.com/wpad.dat http://proxy.ourdomain.com/proxy.pac http://proxy.ourdomain.com /
J'ai défini le type MIME à renvoyer en tant qu'application / x-ns-proxy-autoconfig et j'ai ajouté l'option 252 de notre serveur DHCP à l'URL PAC.
Initialement, le fichier comportait des fins de ligne Unix; j'ai donc pensé que cela risquait de rendre Windows grincheux. Je l'ai donc remplacé par des fins de ligne Windows sans modification.
Lorsque je spécifie les mêmes détails de proxy, le PAC fonctionne manuellement. Windows Update est satisfait, mais lorsqu'il est invité à détecter automatiquement ou à utiliser explicitement notre URL PAC, Windows Update échoue.
La façon dont Windows Update échoue est également très étrange, vous pouvez aller à la page et le chargement se déroule sans problème, probablement parce que IE n'a aucun problème avec le fichier PAC, mais dès que vous cliquez sur le bouton "Express" (ou "Personnalisé" d'ailleurs), la barre de progression tourne pendant environ 5 minutes, puis renvoie une erreur indiquant que la connexion a échoué.
Voici le contenu intégral renvoyé par WPAD, y compris les en-têtes HTTP (bien que anonymisés):
$ curl http://wpad.ourdomain.com/wpad.dat -v
* About to connect() to wpad.ourdomain.com port 80 (#0)
* Trying 10.0.0.80... connected
* Connected to wpad.nuim.ie (10.0.0.80) port 80 (#0)
> GET /wpad.dat HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
> Host: wpad.ourdomain.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 22 Mar 2012 14:14:38 GMT
< Server: Apache/2.2.15 (Red Hat)
< Expires: Thu, 22 Mar 2012 17:14:38 GMT
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/x-ns-proxy-autoconfig; charset=ISO-8859-1
<
function FindProxyForURL(url, host) {
if (isInNet(host, '1.2.0.0', '255.255.0.0')) {
return 'DIRECT';
}
if (isInNet(host, '10.0.0.0', '255.0.0.0')) {
return 'DIRECT';
}
if (isInNet(host, '127.0.0.1', '255.255.255.255')) {
return 'DIRECT';
}
if (isInNet(host, '192.168.0.0', '255.255.0.0')) {
return 'DIRECT';
}
if (localHostOrDomainIs(host, 'somehost.something.com')) {
return 'DIRECT';
}
if (localHostOrDomainIs(host, 'someotherhost.somethingelse.com')) {
return 'DIRECT';
}
return "PROXY proxy1.ourdomain.com:3128;PROXY proxy2.ourdomain.com:3128;DIRECT";
}
//some debug information here in a comment
* Closing connection #0