关于crossdomain.xml:如何为简单的AJAX web应用启用CORS

How to enable CORS for simple AJAX web application

我已经搜索了很多关于 AJAX 调用 CORS 的解决方案,但我仍然无法从其他服务器获取 XML 数据。

这是控制台注释:

XMLHttpRequest 无法加载 url.xml。请求的资源上不存在"Access-Control-Allow-Origin"标头。因此不允许访问源"http://localhost"

我已遵循以下说明:http://www.html5rocks.com/en/tutorials/cors/ 部分:来自 jQuery 的 CORS,这是我尝试的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$.ajax({
    type:'GET',
    url:'http://www.someurl.xml',
    contentType:'text/plain',
    xhrFields:{
        withCredentials: false
    },
    headers: {
        'Access-Control-Allow-Origin':'http://localhost:8080',
        'Access-Control-Allow-Method':'GET',
        'Access-Control-Allow-Headers':'Content-Type,x-requested-with,Authorization,Access-Control-Allow-Origin'
    },
    success: function(data){
        var test = data;
    }
});

我知道这个问题已经被问过很多次了,但没有答案可以帮助解决我的问题。

为了在 localhost 中进行测试,我使用的是 IIS 8.5


$.ajax 代码中的 headers 部分将标头添加到对服务器的请求中,但 CORS 标头需要出现在来自服务器的响应中。

使用 IIS,您可以在 web.config<system.webServer> 部分添加带有几行的标题。添加这将使您开始 GET 请求:

1
2
3
4
5
6
7
<system.webServer>
 <httpProtocol>
  <customHeaders>
   
  </customHeaders>
 </httpProtocol>
</system.webServer>

有关更多信息,请参阅此帖子:http://encosia.com/using-cors-to-access-asp-net-services-across-domains/


CORS 标头必须由您正在调用的服务器发送,您不能向它们提供请求本身。

当跨域发出请求时,您的浏览器将在实际请求数据之前执行预检请求以获取相关的 CORS 标头(我相信这使用了 OPTION 方法)。

如果来自 preflight 的 CORS 标头包含当前来源或与之匹配的通配符,则浏览器将继续处理实际请求并获取一些数据。