javascript - 跨域脚本javascript请求

标签 javascript asp.net-mvc-3 http cross-domain

我正在开发一个 ASP.NET MVC 应用程序,它包含一个托管所有 JavaScript、CSS 和图像的网站,然后是使用托管在该网站上的资源的主要 ​​Web 应用程序。

假设资源 url 是 resources.example.com,网络应用程序 url 是 webapp.example.com

为了工作,其中一个 JavaScript 文件 IE9.js (http://code.google.com/p/ie7-js/) 向 CSS 文件 (resources.example.com/styles.css) 发出请求),然而,由于请求是针对另一个域,这会被阻止,这是因为同源策略 (http://en.wikipedia.org/wiki/Same_origin_policy)。

我想我已经找到了解决这个问题的方法,使用 resources.example.com 站点的 Access-Control-Allow-Origin header 。我对此的理解是,这将允许向 resources.example.com 网站发出的任何请求,前提是它们在该 header 中。

为了尝试这个,我将 header 添加到网站的 web.config 中,如下所示:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*"/>
  </customHeaders>
</httpProtocol>

我认为这将允许任何请求运行权限,但是当我单步执行 IE9.js 到发出请求的位置时,它在请求 CSS 文件 resources.example.com/styles 时仍然捕获 PermissionDenied 错误。 CSS。

CSS 必须托管在其他域上,并且 IE9.js 需要能够请求它。我相信答案与这些 HTTP header 有关,但我可能误解了如何使用它们。

如果您对此问题有任何见解,我们将不胜感激。顺便说一句,我应该补充一点,javascript 文件是从谷歌代码网站链接到的:

<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script>
<![endif]-->

在条件注释中,这只是 IE 中的一个问题。任何解决方案都必须在 IE7+ 中运行。

更新:

我已成功使用 IE 的 XDomainRequest 对象向 CSS 发出请求。我现在取回的内容是 gzip 压缩的,所以我只需要对其进行解码,我就应该离开了。我会在它运行时发布完整的更新和答案。

更新:

此外,XDomainRequest 对象似乎不支持能够修改 Accept-Encoding header ,这意味着响应似乎总是以编码和解码的方式返回,这会减慢页面加载速度并且不会感觉不错。此外,IE7 似乎不支持 XDomainRequest 对象,而 IE7 是必需的受支持浏览器。

我唯一能想到的另一件事是设置一个 IE9.js 可以调用的处理程序,它将位于同一域中并加载所需文件的内容。这也感觉不太好,但这是我目前能想到的唯一其他解决方案。欢迎任何其他建议。

最佳答案

解决这个问题的另一种方法是在 IIS 前面放置一个反向代理(例如 Nginx)。

然后将 location proxy_pass 添加到 webapp.domain.com 和 resources.domain.com。以这种方式,它默认为 webapp.domain.com,但如果您使用 webapp.domain.com/resources,它将转到 resources.domain.com。

通过这种方式,客户端仅请求一个来源,因此在跨站点脚本中。

这个技巧在本地测试时也非常方便。

只是一个想法...

关于javascript - 跨域脚本javascript请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130543/

相关文章:

javascript - 如何在同一屏幕内更改 View (React Native)?

asp.net-mvc - 在 View 中使用 ko 时 ko.applyBindings 给出错误 "ko is not defined"

表单的 "button"类型而不是 "submit"类型的 JQuery 验证

asp.net-mvc-3 - ASP.NET MVC 3 区域中的路由问题

http - JSONP 响应 http 内容类型 header

当我测试变量是否存在时,JavaScript 保持平衡

javascript - 在 _.map() 中使用异步函数

javascript - 如何在每次页面运行时重新加载 HTML 中的 YouTube 视频?

c - HTTP 请求的每个 TCP 数据包都包含 HTTP header 吗?

java - 无法在 Java : "pathLenConstraint violated - this cert must be the last cert in the certification path" 中对 SSL 站点进行身份验证