Вопрос Ajax с Zscaler

На моей странице у меня есть этот вызов ajax:

$.getJSON(
    "@Url.Action("GetSchedulers")",
    { start: start, end: end },
    function(data) {
       fillCalendar(data);
    }
);

Все работает нормально, за исключением случаев, когда я пытаюсь получить доступ к нему за прокси-сервером Zscaler, браузер возвращает ошибку CORS:

"No 'Access-Control-Allow-Origin' header is present on the requested resource."

URL-адрес запроса https://gateway.zscaler.net/auD?origurl={my_url}.

Кто-нибудь знает, как отправить запрос без его фильтрации с помощью zscaler?

Ответ 1

Вам нужно включить CORS на веб-сайте ASP.NET и разрешить домен https://gateway.zscaler.net. CORS требуется, когда ресурс на странице (например, запрос AJAX) относится к другому домену, чем тот, который использовался для обслуживания страницы. Согласно RFC 6454, схема (http vs https), адрес и порт должны совпадать.

Предполагая, что у вас есть проект веб-API ASP.NET, обслуживающий запросы GetSchedulers, следуйте инструкциям Asp.Net WebAPI:

  • Добавить пакет Microsoft.AspNet.WebApi.Cors nuGet
  • Добавить config.EnableCors(); в метод void Register(HttpConfiguration config)
  • Добавьте этот атрибут в свой контроллер: [EnableCors(origins: "https://gateway.zscaler.net", headers: "*", methods: "*")]

Если вы используете другую реализацию на стороне сервера, тогда инструкции будут немного отличаться. Например, если вы используете OWIN, используйте Microsoft.Owin.Cors пакет nuGet.

Ответ 2

Попробуйте использовать JSON-P для запроса: http://json-p.org/. Если это не сработает, ознакомьтесь с настройкой базового ресурса для приема запросов из другого домена.

Ответ 3

Только опция - отключить Zscaler с вашего локального хоста. Это можно сделать, используя regedit. Zscaler обычно настраивается только для рабочих станций. Когда вы развертываете свое приложение на тестовом/производственном сервере, оно должно работать там.

Пошаговые инструкции Regedit для отключения Zscaler ниже.

Отключить автоматический кэш результатов прокси-сервера, используя следующий раздел реестра: HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\CurrentVersion\Настройки Интернета

Значение: EnableAutoproxyResultCache

Тип: REG_DWORD

Значение данных: 0= отключить кеширование

Если ключ реестра отсутствует, вы можете создать раздел реестра, используя следующий файл реестра:

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings] "EnableAutoProxyResultCache" = dword: 00000000 "