Zscaler的Ajax问题

时间:2015-10-25 14:57:25

标签: javascript c# ajax asp.net-mvc

在我的页面上,我有这个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过滤的情况下发送请求?

3 个答案:

答案 0 :(得分:6)

您需要在ASP.NET网站中启用CORS,并允许https://gateway.zscaler.net域。当页面中的资源(例如AJAX请求)与用于提供页面的域不同时,需要CORS。根据{{​​3}},方案(http vs https),地址和端口必须匹配。

假设您有一个ASP.NET Web API项目提供GetSchedulers个请求,请按照RFC 6454

进行操作
  1. 添加Microsoft.AspNet.WebApi.Cors nuGet包
  2. config.EnableCors();添加到void Register(HttpConfiguration config)方法
  3. 将此属性添加到您的控制器:[EnableCors(origins: "https://gateway.zscaler.net", headers: "*", methods: "*")]
  4. 如果您使用的是其他服务器端实现,则说明会略有不同。例如,如果您使用的是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“