Вопрос 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 "