Как использовать прокси-сервер в зависимости от URL?

В PAC скрипте у функции <b>shExpMatch</b> возникли проблемы с соответствием части URL. <br/> <blockquote>При доступе к URL пути и компоненты запроса для HTTPS-URL удаляются. В Chrome (версии 52-73) это можно отключить, установив параметр PacHttpsUrlStrippingEnabled в значение false в политике или запустив с флагом командной строки --unsafe-pac-url; начиная с Chrome 74, работает только флаг, а начиная с 75, отключить удаление пути невозможно; на момент Chrome 81 удаление пути не применяется к HTTP-URL, но существует заинтересованность в изменении этого поведения для соответствия с HTTPS. В Firefox эта настройка определяется параметром network.proxy.autoconfig_url.include_path.</blockquote> <br/> У меня есть временное решение, хотя я полностью осознаю, что это не идеальный вариант, а настоящий КОСТЫЛЬ. <br/> Кроме того, <b>host_permissions</b> не функционирует так, как мне хотелось бы, так как некоторые запросы, которые не соответствуют шаблонам, все равно проходят мимо. <br/> В итоге, мне необходимо, чтобы через прокси проходили лишь несколько определенных запросов. <br/> Есть ли у вас идеи, как это можно реализовать?
  • 29 августа 2024 г. 19:24
Ответы на вопрос 2
Использование прокси-сервера в зависимости от URL в PAC (Proxy Auto-Configuration) скрипте может быть действительно сложной задачей из-за различных особенностей работы браузеров и ограничения настроек. Вот несколько рекомендаций и идей, которые могут помочь вам решить эту проблему:

1. **Использование `shExpMatch` и `dnsDomainIs`**: Убедитесь, что правильно используете функции PAC для проверки как доменных имен, так и URL. Например:
   ```javascript
   function FindProxyForURL(url, host) {
       if (shExpMatch(url, "https://specific.domain/*")) {
           return "PROXY my.proxy.server:8080";
       }
       return "DIRECT";
   }
   ```

2. **Сокращение проблем с HTTPS**: Если вы работаете с HTTPS и столкнулись с проблемами незначительных частей URL, постарайтесь использовать другие функции, такие как `dnsDomainIs`, которые могут помочь с доменной частью, хотя это не всегда решает проблему.

3. **Фильтрация по параметрам URL**: Если в вашем случае значения query параметров важны, их можно обрабатывать, но в этом случае нужно учитывать ограничения, согласно которым браузеры могут не передавать часть URL. Например:
   ```javascript
   function FindProxyForURL(url, host) {
       if (shExpMatch(url, "*?param=value*")) {
           return "PROXY my.proxy.server:8080";
       }
       return "DIRECT";
   }
   ```

4. **Использование нескольких прокси**: Если вас интересует некое ограниченное число URL, подумайте над созданием нескольких правил для разных прокси, если это возможно.

5. **Имейте в виду особенности браузеров**: Как вы указали, Chrome и Firefox по-разному обрабатывают PAC-скрипты и пути URL. Возможно, стоит протестировать код на обоих браузерах и выяснить, как он обрабатывается, чтобы найти лучшие решения.

6. **JavaScript решение**: Если ваши условия и ограничения позволяют использовать JS, можно обрабатывать запросы через собственный серверный слой, который будет принимать запросы и перенаправлять их на прокси в нужных случаях. Это может быть сложнее в реализации, но даст вам полное управление над тем, что отправляется через прокси.

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

8. **Обсуждения сообществ**: Если у вас остаются вопросы, рекомендуется обращаться к сообществам разработчиков, где могут быть полезные рекомендации от тех, кто сталкивался с аналогичными проблемами.

Также возьмите во внимание, что существует множество специфических факторов, которые могут повлиять на ваше решение (например, наличие корпоративного firewall или NAT), и в конечном итоге лучше всего испытать ваши предложения на практике.
А почему бы не установить 
PacHttpsUrlStrippingEnabled to false
, а потом использовать совет который вам дали в предыдущем вопросе Config SQUID (Windows) настройка прокси? ?
Похожие вопросы