使用jQuery AJAX的WCF REST – 删除/解决相同的源策略

所以我正在尝试创建一个由jQuery调用的C#WCF REST服务。 我发现jQuery要求AJAX调用是在相同的源策略下进行的。 关于如何进行,我有几个问题。

我已经知道了;
1. JSONP与服务器回调的hacky解决方案
2.拥有跨域代理的服务器开销过多的方式。
3.在浏览器中使用Flash进行调用并在我的WCF服务器根目录下设置crossdomain.xml。

我宁愿不使用这些因为;
1.我不想使用JSON,或者至少我不想限制使用它
2.我想将提供静态页面的服务器与提供应用程序状态的服务器分开。
3.这个时代的闪光是不可能的。

我在想:有没有类似Flash的crossdomain.xml文件适用于jQuery? 这个“同源”策略是jQuery的一部分还是特定浏览器中的限制? 如果它只是jQuery的一部分,也许我会尝试挖掘代码来解决它。

编辑:
Shreddd得到了相当多的信息,见下文。 要在C#中执行此操作,我创建了以下方法,您需要调用所有服务方法:

private void BypassCrossDomain() { WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*"); } 

重要的是要注意,这允许跨站点脚本攻击,当您需要根据您的请求发送第三方cookie时,您也不能使用“*”。

您还可以考虑吐出额外的http标头,以便在您的Web服务上启用跨域请求。

这在这里描述:

http://www.w3.org/TR/cors/

https://developer.mozilla.org/en/HTTP_access_control

因此,如果您将以下标头添加到Web服务提供的任何内容中:

 Access-Control-Allow-Origin: * 

浏览器将允许跨域请求到该Web服务。 这在大多数现代浏览器(ff 3.5,IE 8,safari 4)中都受支持,并且似乎非常适合在域foo.com上托管的jquery应用程序,这些应用程序对bar.com进行ajax调用

不幸的是,同源策略是对浏览器的限制,而不是jQuery的明确部分,所以我怀疑你是否会找到解决方法。

我建议你最好的办法是坚持使用JSONP解决方案。 是的,你可以说是“hacky”,但它是一个被广泛接受的“黑客”,正是因为你遇到的原因(即它是唯一可行的选择之一)。

至于限制使用JSON,如果您控制服务调用的两端,则没有理由不能使用JSONP样式使用模式,但实际上不使用JSON …您的服务器响应刚刚开始要传递给客户端的JavaScript函数,所以没有阻止你在字符串中返回XML,然后让你的回调解析并处理它(尽管,这可能会让你进入真正的“hacky”领域)。

两天的打猎,终于找到了这个! 比你csuave!

由于我的WCF应用程序是自托管的(将xml添加到app.config并且web.config没有帮助),但这可行!

 private void BypassCrossDomain() { WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow- Origin", "*"); } 

– 不适用于自托管: