Функции dnsResolve и isInNet Проблема

У нас есть файл Proxy.pac:

function FindProxyForURL(url, host) {
  if (dnsResolve("ProxyServer") == "10.1.1.116")
    if (dnsDomainLevels(host) == 0 ||
        isInNet(host, "10.0.0.0","255.0.0.0") ||
        isInNet(host, "125.0.0.0","255.0.0.0") ||
        isInNet(host, "127.0.0.0","255.0.0.0") ||
        isInNet(host, "204.223.70.250","255.255.255.255") ||
        dnsDomainIs(host, ".muj.com") ||
        dnsDomainIs(host, "sv.com.gt") ||
        dnsDomainIs(host, "com.es.gt"))
      return "DIRECT";
    else return "PROXY 10.1.1.116:8080";

  else return "DIRECT";
}

Работает нормально, но есть много пользователей, которые жалуются из-за навигации, так как развертывание proxy.pac занимает много времени. Похоже на то dnsResolve а также isInNet являются причиной проблемы. Есть ли другой способ улучшить этот скрипт? или как разрешить днс решить?

2 ответа

Есть ли в вашей организации несколько прокси-серверов, и предполагается, что этот файл.pac относится к серверу с адресом 10.1.1.116? Если нет, то вы можете просто избавиться от этой проверки. поскольку FindProxyForURL() вызывается для каждого запроса вашего браузера dnsResolve() потенциально может заблокировать ваш браузер на некоторое время, в зависимости от того, насколько хорошо работает ваш DNS.

Если вам это нужно dnsResolve() позвоните, то один из способов обойти это переместить его за пределы FindProxyForURL():

var myProxyServerIP = dnsResolve("ProxyServer");

function FindProxyForURL(url, host) {
  if (myProxyServerIP == "10.1.1.116")
    if (dnsDomainLevels(host) == 0 ||
        isInNet(host, "10.0.0.0","255.0.0.0") ||
        isInNet(host, "125.0.0.0","255.0.0.0") ||
        isInNet(host, "127.0.0.0","255.0.0.0") ||
        isInNet(host, "204.223.70.250","255.255.255.255") ||
        dnsDomainIs(host, ".muj.com") ||
        dnsDomainIs(host, "sv.com.gt") ||
        dnsDomainIs(host, "com.es.gt"))
      return "DIRECT";
    else return "PROXY 10.1.1.116:8080";

  else return "DIRECT";
}

Это изменение сделает так, чтобы dnsResolve() вызывается только при загрузке файла.pac, а не каждый раз, когда в браузер делается запрос. Вам нужно будет определить, можете ли вы что-то сделать в своей среде, исходя из того, как часто этот адрес будет меняться. Но опять же, адрес вашего прокси-сервера должен быть статическим.

Подсети проверяются с помощью isInNet() вызывает один-к-одному карту доменов, которые вы проверяете с помощью dnsDomainIs() звонки? Если это так, то у вас есть резервирование и вы можете удалить один набор вызовов.

Кроме этого, я не вижу ничего другого, что можно было бы рекомендовать, исходя из того, что я могу отличить вашу среду от вашего вопроса.

Для каждого вызова функции isInNet выполняется поиск DNS, если хост не является IP-адресом. Это замедлит процесс, так как вам придется выполнить 4 поиска DNS и ждать ответа от DNS-сервера. Вы можете сделать следующее, чтобы уменьшить количество вызовов DNS до одного.

 function FindProxyForURL(url, host) {
  if (dnsResolve("ProxyServer") == "10.1.1.116")

    hostip=dnsResolve(host);

    if (dnsDomainLevels(host) == 0 ||
        isInNet(hostip, "10.0.0.0","255.0.0.0") ||
        isInNet(hostip, "125.0.0.0","255.0.0.0") ||
        isInNet(hostip, "127.0.0.0","255.0.0.0") ||
        isInNet(hostip, "204.223.70.250","255.255.255.255") ||
        dnsDomainIs(host, ".muj.com") ||
        dnsDomainIs(host, "sv.com.gt") ||
        dnsDomainIs(host, "com.es.gt"))
      return "DIRECT";
    else return "PROXY 10.1.1.116:8080";

  else return "DIRECT";
}
Другие вопросы по тегам