在我的页面上,我有这个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."
请求网址为https://gateway.zscaler.net/auD?origurl={my_url}
。
有没有人知道如何在没有被zscaler过滤的情况下发送请求?
答案 0 :(得分:6)
您需要在ASP.NET网站中启用CORS,并允许https://gateway.zscaler.net
域。当页面中的资源(例如AJAX请求)与用于提供页面的域不同时,需要CORS。根据{{3}},方案(http vs https),地址和端口必须匹配。
假设您有一个ASP.NET Web API项目提供GetSchedulers
个请求,请按照RFC 6454:
config.EnableCors();
添加到void Register(HttpConfiguration config)
方法[EnableCors(origins: "https://gateway.zscaler.net", headers: "*", methods: "*")]
如果您使用的是其他服务器端实现,则说明会略有不同。例如,如果您使用的是OWIN,请使用Asp.Net WebAPI instructions nuGet包。
答案 1 :(得分:1)
尝试将JSON-P用于请求:http://json-p.org/。如果这不起作用,请查看配置后端资源以接受来自其他域的请求。
答案 2 :(得分:0)
唯一的选择是从本地主机禁用Zscaler。可以使用 regedit 来完成。 Zscaler通常仅为工作站配置。将应用程序部署到测试/生产服务器时,它应该在那里工作。
在下面禁用Zscaler的Regedit分步说明。
使用以下注册表项禁用自动代理结果缓存: HKEY_CURRENT_USER \ Software \ Policies \ Microsoft \ Windows \ CurrentVersion \ Internet Settings
值: EnableAutoproxyResultCache
键入: REG_DWORD
数据值: 0 =禁用缓存
如果注册表项不存在,则可以使用以下注册表文件创建注册表项:
[HKEY_CURRENT_USER \ Software \ Policies \ Microsoft \ Windows \ CurrentVersion \ Internet Settings]“EnableAutoProxyResultCache”= dword:00000000“