Proxy Auto-Configuration PAC file

Suppose you are using your Ubuntu Desktop laptop at home and workplace. When you are at your workplace, the corporate network your laptop is connected to is behind proxy. You would then have to turn on/off proxy depending on where you are. Of course you could manually update proxy settings of Ubuntu Desktop every time your network changes, but that’d be quite cumbersome. That’s when proxy auto-config can help.

A proxy auto-config (PAC) is a powerful mechanism that allows one to conditionally define proxy settings for web browsers. Using PAC, you can automatically switch proxy settings based on destination URL, IP address of local host, time of day, etc. As you can imagine, PAC is extremely useful for setting up proxy exceptions, proxy load balancing, network-aware conditional proxy, etc.

$ sudo vi /etc/proxy.pac
function FindProxyForURL(url, host)
{
  if (isInNet(myIpAddress(), "1.2.3.0", "255.255.255.0")) {
    if (isInNet(host, "192.168.0.0", "255.255.0.0"))
      return "DIRECT";
    if (shExpMatch(url, "http:*"))
      return "PROXY my.proxy.com:8000" ;
    if (shExpMatch(url, "https:*"))
      return "PROXY my.proxy.com:8000" ;
    if (shExpMatch(url, "ftp:*"))
      return "PROXY my.proxy.com:8000" ;
    return "DIRECT";
  } else {
    return "DIRECT";
  }
}

In this PAC file, if you are connected to 1.2.3.0/24 network (assuming that is the corporate network), you use proxy (my.proxy.com:8000) for all destinations other than 192.168.0.0/24. Otherwise, you do not use proxy at all.

Proxy Auto-Configuration PAC file

Alternatively, you can also use gsettings tool to enable PAC from the command line.

To make your Proxy Auto Configuration APC work you need a PAC file and a server to host it.

  1. Write a PAC file with appropriate proxy configuration
  2. Hosting the file: Put it on a web server where the client browser can access it
  3. Setting up client browser for suing the PAC file to get and use proxy configuration
  4. Check if the traffic is going through the proxy server
Содержание
  1. Example Automatic Proxy Configuration PAC file
  2. Hosting the PAC file on a web server for client to access
  3. Setting up client browser for using the PAC file to get and use proxy configuration
  4. Firefox
  5. Chrome
  6. IE
  7. Check if the traffic is going through proxy
  8. Configure the IP address of localhost
  9. Файл автоматической конфигурации прокси (PAC)
  10. Формат возвращаемого значения
  11. Предопределенные функции и окружение
  12. dnsDomainIs()
  13. Use proxy auto configuration on Firefox
  14. Proxy Auto-Configuration (PAC) file
  15. Syntax
  16. Parameters
  17. Description
  18. Return value format
  19. Predefined functions and environment
  20. isPlainHostName()
  21. dnsDomainIs()
  22. localHostOrDomainIs()
  23. isResolvable()
  24. isInNet()
  25. dnsResolve()
  26. convert_addr()
  27. myIpAddress()
  28. dnsDomainLevels()
  29. shExpMatch()
  30. weekdayRange()
  31. dateRange()
  32. timeRange()
  33. alert()
Про мини ПК:  Rongta rope8xх series драйвер и Драйвер v 20180706 80mm для Windows 32 Bit

Example Automatic Proxy Configuration PAC file

Proxy Auto-Configuration is a specialized JavaScript function definition that a browser calls to determine how requests are handled.

First of all create a PAC file which has all the proxy necessary setting you would like your browser to use,

function FindProxyForURL(url, host)

      if (shExpMatch(url, “http:*”))

         return “PROXY 192.168.0.250:3128” ;

      if (shExpMatch(url, “https:*”))

         return “PROXY 192.168.0.250:3128” ;

      if (shExpMatch(url, “ftp:*”))

         return “PROXY 192.168.0.250:3128” ;

In this configuration file, I am declaring my proxy server as 192.168.0.250 port 3128. The client should use this proxy for http, https and ftp requests.

Hosting the PAC file on a web server for client to access

Host your Proxy Auto Configuration file in a web server. This should work on any web environment as long as the right configuration parameters are entered. amusing the name of the web serverserver is http://www.example.com

i have tested it using apache 2 on redhat 5

Upload the file in server root /var/www/html/proxy.pac

AddType application/x-ns-proxy-autoconfig .pac

AddType application/x-ns-proxy-autoconfig .dat #used for configuring auto detect setting using DNS

Restart/Reload apache to activate the new configuration

This is to make the “proxy.pac” file accessible  using the url http://www.example.com/proxy.pac

Setting up client browser for using the PAC file to get and use proxy configuration

After we are down with creating a PAC file appropriate for the network and hosting it on a web server from where web client has a direct access to, we need to configure the client use the PAC file for proxy configuration.

I shall put an example of firefox, Chrome and IE

Firefox

proxy setup, automatic Proxy configaration , Proxy configaration, firefox

Option -> network -> Settings

Select automatic proxy configuration URL:

Enter the full url where you have placed your PAC file and this url should be access able directly from the client browser, example

Chrome

proxy setup, automatic Proxy configaration , Proxy configaration, chrome, IE

Settings -> show advanced settings (at the bottom) -> Change proxy settings

Under connections tab click on LAN settings

Enable Use Automatic configuration script (disable all other option)

Enter the full url where you have placed your PAC file and this url should be access able directly from the client browser, example

IE

proxy setup, automatic Proxy configaration , Proxy configaration, chrome, IE

Tools -> internet option -> connection -> LAN setting

Enable Use Automatic configuration script (disable all other option)

Enter the full url where you have placed your PAC file and this url should be access able directly from the client browser, example

Check if the traffic is going through proxy

In my setup I have been using squid as a proxy, so I monitor for “tail -f /var/log/squid/access.log” and check for traffic request from the client. Make sure any transparent proxy configuration is turned off to avoid wrong reading.

If your traffic is passing through the proxy server, congratulations you have successfully configured automatic proxy configuration server with a PAC file.

Setting up web proxy Autodiscovery protocol using DNS

Configure the IP address of localhost

There is one last important thing to do before finalizing PAC configuration. In the PAC file you created, myIpAddress() is supposed to return the IP address of localhost correctly. As a final step, you should verify that is the case by using hostname command.

$ hostname -i

If the hostname command returns 127.0.0.1, not an actual IP address assigned to your laptop, then myIpAddress() will also return 127.0.0.1, and the above proxy auto configuration will fail. To get around this problem, you need to set up the real IP address of local host somewhere.

In Linux, you can hard code the IP address of local host in /etc/hosts. However, since the IP address of localhost may keep changing depending on where you are, you can write a start-up script which automatically generates /etc/hosts upon boot.

To do that, first rename the original /etc/hosts to something else, which will then be used to generate an actual /etc/hosts to use.

$ sudo mv /etc/hosts /etc/hosts.custom
$ vi hostname.sh
#!/bin/bash

WIRED_IP=`ifconfig eth0 | sed -ne 's/.*inet addr:([^ ]*).*/1/p'`
WIRELESS_IP=`ifconfig wlan0 | sed -ne 's/.*inet addr:([^ ]*).*/1/p'`
HOST_IP=${WIRED_IP:-$WIRELESS_IP}
HOST_NAME="your_host_name"

cat /etc/hosts.custom > /etc/hosts

cat >> /etc/hosts << EOF
# This file is automatically generated by /sbin/hostname.sh
$HOST_IP  $HOST_NAME
EOF

exit 0

The script hostname.sh takes the IP address of either eth0 (for wired) or wlan0 (for wireless), and puts it in /etc/hosts.

$ sudo chmod 755 hostname.sh
$ sudo cp hostname.sh /etc/NetworkManager/dispatcher.d

Now the hostname.sh script will get executed to update /etc/hosts automatically every time any wired or wireless network interface is up.

An alternative way to run the hostname.sh script is to configure your Ubuntu Desktop, so that the script automatically gets executed when you log in to your desktop.

After using either of the above two methods, verify that your hostname can successfully be resolved to IP address after you log in.

$ hostname -i
1.2.3.100

Proxy auto configuration is now set up on Ubuntu Desktop. Your Ubuntu Desktop will automatically turn on or off proxy depending on where you are at home or workplace.

Файл автоматической конфигурации прокси (PAC)

<span data-i18n="06fe2028c6d41d5f963c85bb23a2f9582052e0be/c5" data-source="A Proxy Auto-Configuration (PAC) file is a JavaScript function that determines whether web browser requests (HTTP, HTTPS, and FTP) go directly to the destination or are forwarded to a web proxy server. The JavaScript function contained in the PAC file defines the function:» onmousemove=»i18n(this)»>Proxy Auto-Configuration (PAC) файл является функцией JavaScript , который определяет , является ли запросы веб — браузера (HTTP, HTTPS и FTP) перейти непосредственно к месту назначения или направляются к веб — прокси — сервер. Функция JavaScript, содержащаяся в файле PAC, определяет функцию:

 () {
  
}

url

<span data-i18n="ab68e1cdf6b3b2fc5d165ae5d131fcb809d37323/d4" data-source="The URL being accessed. The path and query components of https:// URLs are stripped. In Chrome (versions 52 to 73), you can disable this by setting PacHttpsUrlStrippingEnabled to false in policy or by launching with the --unsafe-pac-url command-line flag (in Chrome 74, only the flag works, and from 75 onward, there is no way to disable path-stripping; as of Chrome 81, path-stripping does not apply to HTTP URLs, but there is interest in changing this behavior to match HTTPS); in Firefox, the preference is network.proxy.autoconfig_url.include_path.» onmousemove=»i18n(this)»>URL-адрес, к которому осуществляется доступ. Компоненты пути и запроса URL https:// удаляются. В Chrome (версии с 52 по 73) вы можете отключить это, установив для PacHttpsUrlStrippingEnabled значение false в политике или запустив с --unsafe-pac-url командной строки —unsafe-pac-url (в Chrome 74 работает только флаг, а с 75 и далее). , нет способа отключить удаление пути; начиная с Chrome 81, удаление пути не применяется к URL-адресам HTTP, но есть интерес изменить это поведение, чтобы оно соответствовало HTTPS); в Firefox предпочтение — network.proxy.autoconfig_url.include_path .

host

<span data-i18n="5f24db479cf2b72fa937bcb464d99834bc0f6796/56" data-source="The hostname extracted from the URL. This is only for convenience; it is the same string as between :// and the first : or / after that. The port number is not included in this parameter. It can be extracted from the URL when necessary.» onmousemove=»i18n(this)»>Имя хоста, извлеченное из URL-адреса. Это только для удобства; это та же строка, что и между :// и первым : или / после этого. Номер порта не входит в этот параметр. При необходимости его можно извлечь из URL-адреса.

<span data-i18n="a5275c587d1874bd04ab3b907533a732dac13af3/92" data-source="Returns a string describing the configuration. The format of this string is defined in return value format below.» onmousemove=»i18n(this)»>Возвращает строку, описывающую конфигурацию. Формат этой строки определяется в формате возвращаемого значения ниже.

Формат возвращаемого значения

  • Функция JavaScript возвращает единственную строку
  • Если строка нулевая,прокси-серверы не должны использоваться
  • Строка может содержать любое количество следующих строительных блоков,разделенных точкой с запятой:
DIRECT

Соединения должны осуществляться напрямую,без каких-либо прокси-серверов.

PROXY host:port

Необходимо использовать указанный прокси-сервер

SOCKS host:port

Должен использоваться указанный сервер SOCKS

Последние версии поддержки Firefox:

HTTP host:port

Необходимо использовать указанный прокси-сервер

HTTPS host:port

Необходимо использовать указанный HTTPS прокси

<span data-i18n="1d79b8d63c02c4e1e3bea9761ae45935bea1e215/c9" data-source="SOCKS4 host:port, SOCKS5 host:port» onmousemove=»i18n(this)»>SOCKS4 host:port, SOCKS5 host:port

Следует использовать указанный SOCKS-сервер (с указанной версией SOCK)

Если есть несколько настроек с точкой с запятой,то будет использоваться крайняя левая настройка,пока Firefox не установит соединение с прокси-сервером.В этом случае будет использовано следующее значение и т.д.

По истечении 30 минут браузер автоматически повторит попытку использования ранее не отвечавшего прокси-сервера.Дополнительные попытки будут продолжаться,начиная с одного часа,всегда добавляя 30 минут к истекшему времени между попытками.

Если все прокси не работают,и не указана опция DIRECT,браузер спросит,следует ли временно игнорировать прокси,а также делать попытки прямого подключения.Через 20 минут браузер спросит,следует ли перепробовать прокси,и спросит еще раз через 40 минут.Запросы будут продолжаться,всегда добавляя 20 минут к истекшему времени между запросами.

PROXY w3proxy.netscape.com:8080; PROXY mozilla.netscape.com:8081

Первичный прокси-это w3proxy:8080;если это снижается,начинайте использовать mozilla:8081,пока первичный прокси не появится снова.

PROXY w3proxy.netscape.com:8080; PROXY mozilla.netscape.com:8081; DIRECT

То же самое,что и выше,но если оба прокси-сервера падают,то автоматически начинают делать прямые соединения.(В первом примере,приведенном выше,Netscape запросит подтверждение пользователя о создании прямого соединения;в этом случае никакого вмешательства пользователя нет).

PROXY w3proxy.netscape.com:8080; SOCKS socks:1080

Используйте SOCKS,если основной прокси-сервер не работает.

<span data-i18n="2484849ce31ec75991b42e401455ef29930353fe/c4" data-source="The auto-config file should be saved to a file with a .pac filename extension: proxy.pac.» onmousemove=»i18n(this)»>Файл автоконфигурации следует сохранить в файл с расширением .pac: proxy.pac .

<span data-i18n="5e61ea683e19ab67e26dd1a6156d5fd67682c56c/63" data-source="And the MIME type should be set to application/x-ns-proxy-autoconfig.» onmousemove=»i18n(this)»>И тип MIME должен быть установлен как application/x-ns-proxy-autoconfig .

Далее,вы должны настроить свой сервер на сопоставление расширения имени файла .pac с MIME типом.

  • Функция JavaScript всегда должна быть сохранена в файл сама по себе,но не должна быть встроена в HTML-файл или любой другой файл.
  • Примеры,приведенные в конце этого документа,являются полными.Нет необходимости в дополнительном синтаксисе,чтобы сохранить его в файл и использовать.(Конечно,JavaScripts необходимо отредактировать,чтобы отразить доменное имя и/или подсети вашего сайта).

Предопределенные функции и окружение

Эти функции могут быть использованы при создании файла PAC:

<span data-i18n="d629cb4339e120f01ae644b0efd03ceaf40c19a8/64" data-source="Note: pactester (part of the pacparser package) was used to test the following syntax examples.» onmousemove=»i18n(this)»>Примечание: pactester (часть пакета pacparser ) использовался для тестирования следующих примеров синтаксиса.

  • <span data-i18n="b865b396cc503b061720f4db16c1a8fdc2531248/e4" data-source="The PAC file is named proxy.pac» onmousemove=»i18n(this)»>Файл PAC называется proxy.pac .
  • <span data-i18n="62674fb494832a5696aeff81df38c79717f4136f/6c" data-source="Command line: pactester -p ~/pacparser-master/tests/proxy.pac -u http://www.mozilla.org (passes the host parameter www.mozilla.org and the url parameter http://www.mozilla.org)» onmousemove=»i18n(this)»>Командная строка: pactester -p ~/pacparser-master/tests/proxy.pac -u http://www.mozilla.org (передает параметр host www.mozilla.org и параметр url http://www.mozilla.org )

Имя хоста с URL (за исключением номера порта).

Правда,если и только если в имени хоста нет доменного имени (нет точек).

("www.mozilla.org") 
("www") 

dnsDomainIs()

(host, domain)

Это имя хоста с URL-адреса.

Это доменное имя для проверки имени хоста.

Возвращает значение true только в том случае,если домен имени хоста совпадает.

dnsDomainIs(, ) // 
dnsDomainIs(, ) // 

(host, hostdom)

Имя хоста из URL.

Полностью квалифицированный хозяин матча против.

<span data-i18n="0331e5317c1a5353192cf6b448ec4dc07116aaba/32" data-source="Is true if the hostname matches exactly the specified hostname, or if there is no domain name part in the hostname, but the unqualified hostname matches.» onmousemove=»i18n(this)»>Верно, если имя хоста точно совпадает с указанным именем хоста или если в имени хоста нет части имени домена, но совпадает неквалифицированное имя хоста.

localHostOrDomainIs(, )  //  (exact )
localHostOrDomainIs(, )              //  (hostname , domain  specified)
localHostOrDomainIs(, )   //  (domain name mismatch)
localHostOrDomainIs(, ) //  (hostname mismatch)

это имя хоста из URL.

Пытается разрешить имя хоста.Возвращает правду,если получится.

("www.mozilla.org") 

(host, pattern, mask)

Спецификация модели и маски выполняется так же,как и для конфигурации SOCKS.

 () {
  ();
}
 () {
  ('isInNet(host, "63.245.213.24", "255.255.255.255")');
  
}

имя хоста для решения.

("www.mozilla.org"); 

Концентрирует четыре разделенных точками байта в одно 4-байтовое слово и преобразует его в десятичный.

("."); 

это имя хоста из URL.

Возвращает количество (целое)уровней домена DNS (количество точек)в имени хоста.

("www");             
("mozilla.org");     
("www.mozilla.org"); 

это любая строка для сравнения (например,URL или имя хоста).

это выражение скорлупы для сравнения.

<span data-i18n="48c3adebd75ddfb4a64369c924d3e15dfeba0d11/3f" data-source="Returns true if the string matches the specified shell glob expression.» onmousemove=»i18n(this)»>Возвращает true если строка соответствует указанному выражению глобуса оболочки.

<span data-i18n="ee3fffca49da6615930a4c466eb0714466a8e334/70" data-source="Note: If supported by the client, JavaScript regular expressions typically provide a more powerful and consistent way to pattern-match URLs (and other strings).» onmousemove=»i18n(this)»>Примечание. Регулярные выражения JavaScript, если они поддерживаются клиентом, обычно обеспечивают более эффективный и последовательный способ сопоставления URL-адресов (и других строк) с шаблоном.

shExpMatch(, );  returns 
shExpMatch(, );  returns 

(wd1, wd2, [gmt])

<span data-i18n="f212eaf13d457df83503062dead709db68c15700/08" data-source="Note: (Before Firefox 49) wd1 must be less than wd2 if you want the function to evaluate these parameters as a range. See the warning below.» onmousemove=»i18n(this)»>Примечание. (До Firefox 49) wd1 должно быть меньше wd2, если вы хотите, чтобы функция оценивала эти параметры как диапазон. См. Предупреждение ниже.

вд1 и вд2

<span data-i18n="35421825ec7af2180a52d2e2cd0be7b5af7a7022/af" data-source="One of the ordered weekday strings: "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"» onmousemove=»i18n(this)»>Одна из упорядоченных строк дня недели: "SUN" , "MON" , "TUE" , "WED" , "THU" , "FRI" , "SAT"

Это либо строка «GMT»,либо она пропущена.

Обязательным является только первый параметр.Или второй,и третий,или оба могут быть пропущены.

Если присутствует только один параметр,функция возвращает значение true в день недели,который представляет параметр.Если в качестве второго параметра указана строка «GMT»,то время принимается равным GMT.В противном случае предполагается,что они находятся в локальном часовом поясе.

<span data-i18n="e16e968a5389294434183eb145169cd64e832fbe/dc" data-source="If both wd1 and wd1 are defined, the condition is true if the current weekday is in between those two ordered weekdays. Bounds are inclusive, but the bounds are ordered. If the "GMT" parameter is specified, times are taken to be in GMT. Otherwise, the local timezone is used.» onmousemove=»i18n(this)»>Если определены и wd1, и wd1 , условие истинно, если текущий день недели находится между этими двумя упорядоченными днями недели. Границы инклюзивные, но упорядоченные . Если указан параметр «GMT», время будет в GMT. В противном случае используется местный часовой пояс.

<span data-i18n="56e7e94a265849deeab8906ff90cbbc764c80d3c/88" data-source="Warning:The order of the days matters. Before Firefox 49, weekdayRange("SUN", "SAT") will always evaluate to true. Now weekdayRange("WED", "SUN") will only evaluate to true if the current day is Wednesday or Sunday.» onmousemove=»i18n(this)»>Предупреждение: порядок дней имеет значение . До Firefox 49 weekdayRange("SUN", "SAT") всегда будет иметь значение true . Теперь weekdayRange("WED", "SUN") будет оцениваться как true если текущий день — среда или воскресенье.

weekdayRange("MON", "FRI");           Monday through Friday ( timezone)
weekdayRange("MON", "FRI", "GMT");    Monday through Friday (GMT timezone)
weekdayRange("SAT");                   Saturdays  
weekdayRange("SAT", "GMT");            Saturdays GMT 
weekdayRange("FRI", "MON");           Friday  Monday  (note,  does matter)

dateRange( |  | , [gmt])  // ambiguity is resolved by assuming year is greater than 31
dateRange(, , [gmt])
dateRange(, , [gmt])
dateRange(, , [gmt])
dateRange(, , , , [gmt])
dateRange(, , , , [gmt])
dateRange(, , , , , , [gmt])

<span data-i18n="3b316619bdbd38e5eb09b72d3590ee1f38d38423/7b" data-source="Note: (Before Firefox 49) day1 must be less than day2, month1 must be less than month2, and year1 must be less than year2 if you want the function to evaluate these parameters as a range. See the warning below.» onmousemove=»i18n(this)»>Примечание. (До Firefox 49) день1 должен быть меньше дня2, месяц1 должен быть меньше месяца2, а год1 должен быть меньше года2, если вы хотите, чтобы функция оценивала эти параметры как диапазон. См. Предупреждение ниже.

Это упорядоченный день месяца между 1 и 31 (в виде целого числа).

1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31

Это одна из строк заказанного месяца внизу.

|||||||||||

<span data-i18n="7165ac45c85ea0d30878e33d1b544beb92ad0407/3a" data-source="Is the ordered full year integer number. For example, 2016 (not 16).» onmousemove=»i18n(this)»>Заказанное целое число за полный год. Например, 2016 (а не 16).

Либо строка «GMT»,которая делает сравнение времени происходящим в часовом поясе GMT,либо пропущена.Если оставить без указания,время принимается за локальный часовой пояс.

<span data-i18n="219c745dfe181251ec5c580abc0c14da79c6b291/b0" data-source="If only a single value is specified (from each category: day, month, year), the function returns a true value only on days that match that specification. If both values are specified, the result is true between those times, including bounds, but the bounds are ordered.» onmousemove=»i18n(this)»>Если указано только одно значение (из каждой категории: день, месяц, год), функция возвращает истинное значение только в дни, соответствующие этой спецификации. Если указаны оба значения, результат будет истинным между этими временами, включая границы, но границы упорядочены .

<span data-i18n="2c516fb7cf9a097a725d7bdd7fe03a247b7d1993/9d" data-source="Warning:The order of the days, months, and years matter; Before Firefox 49, dateRange("JAN", "DEC") will always evaluate to true. Now dateRange("DEC", "JAN") will only evaluate true if the current month is December or January.» onmousemove=»i18n(this)»>Предупреждение: порядок дней, месяцев и лет имеет значение ; До Firefox 49 dateRange("JAN", "DEC") всегда будет иметь значение true . Теперь dateRange("DEC", "JAN") будет оценивать значение true, только если текущий месяц декабрь или январь.

dateRange();                the     ,  timezone
dateRange(, "GMT")          the     , GMT timezone
dateRange(, );            the  half   
dateRange(, "DEC");        th  December  
dateRange("JAN", "MAR");     the  quarter  the 

dateRange(, "JUN", , "AUG");
    June st until August th,  
 (including June st  August th)

dateRange(, "JUN", , , "AUG", );
    June st, , until August th, same 

dateRange("OCT", , "MAR", );
    October  until March 
 (including the entire   October   March )

dateRange();
   during the entire   

dateRange(, );
    beginning    until the    

// The full range of expansions is analogous to dateRange.
timeRange(, , , , , , [gmt])

<span data-i18n="eda34147dff2822c526f0b3fd2765a2a1c87aa47/2a" data-source="Note: (Before Firefox 49) the category hour1, min1, sec1 must be less than the category hour2, min2, sec2 if you want the function to evaluate these parameters as a range. See the warning below.» onmousemove=»i18n(this)»>Примечание. (До Firefox 49) категория hour1, min1, sec1 должна быть меньше категории hour2, min2, sec2, если вы хотите, чтобы функция оценивала эти параметры как диапазон. См. Предупреждение ниже.

это час с 0 до 23.(0-полночь,23-11 вечера.)

Минуты от 0 до 59.

Секунды от 0 до 59.

Либо строка «GMT» для GMT часового пояса,либо не указана для локального часового пояса.

<span data-i18n="ebc918364962297bbe2d03e861cdada5a4d5d17c/82" data-source="If only a single value is specified (from each category: hour, minute, second), the function returns a true value only at times that match that specification. If both values are specified, the result is true between those times, including bounds, but the bounds are ordered.» onmousemove=»i18n(this)»>Если указано только одно значение (из каждой категории: час, минута, секунда), функция возвращает истинное значение только в моменты времени, соответствующие этой спецификации. Если указаны оба значения, результат будет истинным между этими временами, включая границы, но границы упорядочены .

<span data-i18n="e7672b8bc1e63798a5eb68d404fb1dedfb9a99de/ba" data-source="Warning:The order of the hour, minute, second matter; Before Firefox 49, timeRange(0, 23) will always evaluate to true. Now timeRange(23, 0) will only evaluate true if the current hour is 23:00 or midnight.» onmousemove=»i18n(this)»>Предупреждение: порядок часа, минуты, секунды ; До Firefox 49 значение timeRange(0, 23) всегда было истинным. Теперь timeRange(23, 0) будет оценивать true только в том случае, если текущий час — 23:00 или полночь.

();                
(, );            
(, "GMT");         
(, );             
(, , , );      
(, , , , , ); 

Строка для записи в журнал

Записывает сообщение в консоль браузера.

();            
("Error: shouldn't reach this clause.");      

© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file



HTTP



Use proxy auto configuration on Firefox

First open up Connection Settings menu in Firefox preferences. Then enter resources:///proxy.pac as the automatic proxy configuration URL.

Proxy Auto-Configuration PAC file

Then create a symbolic link to /etc/proxy.pac inside the directory where Firefox executable exists (e.g., /usr/bin).

$ sudo ln -s /etc/proxy.pac /usr/bin/proxy.pac

Once you restart Firefox, it will start using the proxy auto configuration.

Proxy Auto-Configuration (PAC) file

A Proxy Auto-Configuration (PAC) file is a JavaScript function that determines whether web browser requests (HTTP, HTTPS, and FTP) go directly to the destination or are forwarded to a web proxy server. The JavaScript function contained in the PAC file defines the function:

Syntax

 () {
  
}

Parameters

url

The URL being accessed. The path and query components of https:// URLs are stripped. In Chrome (versions 52 to 73), you can disable this by setting PacHttpsUrlStrippingEnabled to false in policy or by launching with the --unsafe-pac-url command-line flag (in Chrome 74, only the flag works, and from 75 onward, there is no way to disable path-stripping; as of Chrome 81, path-stripping does not apply to HTTP URLs, but there is interest in changing this behavior to match HTTPS); in Firefox, the preference is network.proxy.autoconfig_url.include_path.

host

The hostname extracted from the URL. This is only for convenience; it is the same string as between :// and the first : or / after that. The port number is not included in this parameter. It can be extracted from the URL when necessary.

Description

Returns a string describing the configuration. The format of this string is defined in return value format below.

Return value format

  • The JavaScript function returns a single string
  • If the string is null, no proxies should be used
  • The string can contain any number of the following building blocks, separated by a semicolon:
DIRECT

Connections should be made directly, without any proxies

PROXY host:port

The specified proxy should be used

SOCKS host:port

The specified SOCKS server should be used

Recent versions of Firefox support as well:

HTTP host:port

The specified proxy should be used

HTTPS host:port

The specified HTTPS proxy should be used

SOCKS4 host:port, SOCKS5 host:port

The specified SOCKS server (with the specified SOCK version) should be used

If there are multiple semicolon-separated settings, the left-most setting will be used, until Firefox fails to establish the connection to the proxy. In that case, the next value will be used, etc.

The browser will automatically retry a previously unresponsive proxy after 30 minutes. Additional attempts will continue beginning at one hour, always adding 30 minutes to the elapsed time between attempts.

If all proxies are down, and there was no DIRECT option specified, the browser will ask if proxies should be temporarily ignored, and direct connections attempted. After 20 minutes, the browser will ask if proxies should be retried, asking again after an additional 40 minutes. Queries will continue, always adding 20 minutes to the elapsed time between queries.

Examples
PROXY w3proxy.netscape.com:8080; PROXY mozilla.netscape.com:8081

Primary proxy is w3proxy:8080; if that goes down start using mozilla:8081 until the primary proxy comes up again.

PROXY w3proxy.netscape.com:8080; PROXY mozilla.netscape.com:8081; DIRECT
PROXY w3proxy.netscape.com:8080; SOCKS socks:1080

Use SOCKS if the primary proxy goes down.

The auto-config file should be saved to a file with a .pac filename extension: proxy.pac.

And the MIME type should be set to application/x-ns-proxy-autoconfig.

Next, you should configure your server to map the .pac filename extension to the MIME type.

  • The JavaScript function should always be saved to a file by itself but not be embedded in a HTML file or any other file.
  • The examples at the end of this document are complete. There is no additional syntax needed to save it into a file and use it. (Of course, the JavaScripts must be edited to reflect your site’s domain name and/or subnets.)

Predefined functions and environment

These functions can be used in building the PAC file:

  • The PAC file is named proxy.pac
  • Command line: pactester -p ~/pacparser-master/tests/proxy.pac -u http://www.mozilla.org (passes the host parameter www.mozilla.org and the url parameter http://www.mozilla.org)

isPlainHostName()

Syntax
Parameters
host

The hostname from the URL (excluding port number).

Description

True if and only if there is no domain name in the hostname (no dots).

Examples
("www.mozilla.org") 
("www") 

dnsDomainIs()

Syntax
(host, domain)
Parameters
host

Is the hostname from the URL.

domain

Is the domain name to test the hostname against.

Description

Returns true if and only if the domain of hostname matches.

Examples
dnsDomainIs(, ) // 
dnsDomainIs(, ) // 

localHostOrDomainIs()

Syntax
(host, hostdom)
Parameters
host

The hostname from the URL.

hostdom

Fully qualified hostname to match against.

Description

Is true if the hostname matches exactly the specified hostname, or if there is no domain name part in the hostname, but the unqualified hostname matches.

Examples
localHostOrDomainIs(, )  //  (exact )
localHostOrDomainIs(, )              //  (hostname , domain  specified)
localHostOrDomainIs(, )   //  (domain name mismatch)
localHostOrDomainIs(, ) //  (hostname mismatch)

isResolvable()

Syntax
Parameters
host

is the hostname from the URL.

Tries to resolve the hostname. Returns true if succeeds.

Examples
("www.mozilla.org") 

isInNet()

Syntax
(host, pattern, mask)
Parameters
host

a DNS hostname, or IP address. If a hostname is passed, it will be resolved into an IP address by this function.

pattern

an IP address pattern in the dot-separated format.

mask

mask for the IP address pattern informing which parts of the IP address should be matched against. 0 means ignore, 255 means match.

True if and only if the IP address of the host matches the specified IP address pattern.

Pattern and mask specification is done the same way as for SOCKS configuration.

Examples
 () {
  ();
}
 () {
  ('isInNet(host, "63.245.213.24", "255.255.255.255")');
  
}

dnsResolve()

Parameters
host

hostname to resolve.

Resolves the given DNS hostname into an IP address, and returns it in the dot-separated format as a string.

Example
("www.mozilla.org"); 

convert_addr()

Syntax
Parameters
ipaddr

Any dotted address such as an IP address or mask.

Concatenates the four dot-separated bytes into one 4-byte word and converts it to decimal.

Example
("."); 

myIpAddress()

Syntax
Parameters
Return value

Returns the server IP address of the machine Firefox is running on, as a string in the dot-separated integer format.

Warning: myIpAddress() returns the same IP address as the server address returned by nslookup localhost on a Linux machine. It does not return the public IP address.

Example

dnsDomainLevels()

Syntax
Parameters
host

is the hostname from the URL.

Returns the number (integer) of DNS domain levels (number of dots) in the hostname.

Examples
("www");             
("mozilla.org");     
("www.mozilla.org"); 

shExpMatch()

Syntax
Parameters
str

is any string to compare (e.g. the URL, or the hostname).

shexp

is a shell expression to compare against.

Returns true if the string matches the specified shell glob expression.

Note: If supported by the client, JavaScript regular expressions typically provide a more powerful and consistent way to pattern-match URLs (and other strings).

Examples
shExpMatch(, );  returns 
shExpMatch(, );  returns 

weekdayRange()

Syntax
(wd1, wd2, [gmt])

Note: (Before Firefox 49) wd1 must be less than wd2 if you want the function to evaluate these parameters as a range. See the warning below.

Parameters
wd1 and wd2

One of the ordered weekday strings: "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"

gmt

Is either the string «GMT» or is left out.

Only the first parameter is mandatory. Either the second, the third, or both may be left out.

If only one parameter is present, the function returns a value of true on the weekday that the parameter represents. If the string «GMT» is specified as a second parameter, times are taken to be in GMT. Otherwise, they are assumed to be in the local timezone.

If both wd1 and wd1 are defined, the condition is true if the current weekday is in between those two ordered weekdays. Bounds are inclusive, but the bounds are ordered. If the «GMT» parameter is specified, times are taken to be in GMT. Otherwise, the local timezone is used.

Warning:The order of the days matters. Before Firefox 49, weekdayRange("SUN", "SAT") will always evaluate to true. Now weekdayRange("WED", "SUN") will only evaluate to true if the current day is Wednesday or Sunday.

Examples
weekdayRange("MON", "FRI");           Monday through Friday ( timezone)
weekdayRange("MON", "FRI", "GMT");    Monday through Friday (GMT timezone)
weekdayRange("SAT");                   Saturdays  
weekdayRange("SAT", "GMT");            Saturdays GMT 
weekdayRange("FRI", "MON");           Friday  Monday  (note,  does matter)

dateRange()

Syntax
dateRange( |  | , [gmt])  // ambiguity is resolved by assuming year is greater than 31
dateRange(, , [gmt])
dateRange(, , [gmt])
dateRange(, , [gmt])
dateRange(, , , , [gmt])
dateRange(, , , , [gmt])
dateRange(, , , , , , [gmt])

Note: (Before Firefox 49) day1 must be less than day2, month1 must be less than month2, and year1 must be less than year2 if you want the function to evaluate these parameters as a range. See the warning below.

Parameters
day

Is the ordered day of the month between 1 and 31 (as an integer).

1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31
month

Is one of the ordered month strings below.

|||||||||||
year

Is the ordered full year integer number. For example, 2016 (not 16).

gmt

Is either the string «GMT», which makes time comparison occur in GMT timezone, or is left out. If left unspecified, times are taken to be in the local timezone.

Warning:The order of the days, months, and years matter; Before Firefox 49, dateRange("JAN", "DEC") will always evaluate to true. Now dateRange("DEC", "JAN") will only evaluate true if the current month is December or January.

Examples
dateRange();                the     ,  timezone
dateRange(, "GMT")          the     , GMT timezone
dateRange(, );            the  half   
dateRange(, "DEC");        th  December  
dateRange("JAN", "MAR");     the  quarter  the 

dateRange(, "JUN", , "AUG");
    June st until August th,  
 (including June st  August th)

dateRange(, "JUN", , , "AUG", );
    June st, , until August th, same 

dateRange("OCT", , "MAR", );
    October  until March 
 (including the entire   October   March )

dateRange();
   during the entire   

dateRange(, );
    beginning    until the    

timeRange()

Syntax
// The full range of expansions is analogous to dateRange.
timeRange(, , , , , , [gmt])

Note: (Before Firefox 49) the category hour1, min1, sec1 must be less than the category hour2, min2, sec2 if you want the function to evaluate these parameters as a range. See the warning below.

Parameters
hour

Is the hour from 0 to 23. (0 is midnight, 23 is 11 pm.)

min

Minutes from 0 to 59.

sec

Seconds from 0 to 59.

gmt

Either the string «GMT» for GMT timezone, or not specified, for local timezone.

Warning:The order of the hour, minute, second matter; Before Firefox 49, timeRange(0, 23) will always evaluate to true. Now timeRange(23, 0) will only evaluate true if the current hour is 23:00 or midnight.

Examples
();                
(, );            
(, "GMT");         
(, );             
(, , , );      
(, , , , , ); 

alert()

Syntax
Parameters
message

The string to log

Logs the message in the browser console.

Examples
();            
("Error: shouldn't reach this clause.");      

© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file



HTTP



Оцените статью
Карман PC
Добавить комментарий