代码之家  ›  专栏  ›  技术社区  ›  csauve

WCF REST与jqueryajax-删除/处理同一源策略

  •  10
  • csauve  · 技术社区  · 14 年前


    1.JSONP服务器回调的黑客解决方案
    2.使用跨域代理的服务器开销太大。


    1.我不想使用JSON,或者至少我不想被限制使用它

    3.闪现在这个时代是不可能的。

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






    Shredd很到位,见下。为了在C中实现这一点,我创建了以下方法,您的所有服务方法都需要调用这些方法:

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

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

    3 回复  |  直到 12 年前
        1
  •  5
  •   shreddd    14 年前

    您还可以考虑抛出一个额外的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)中都得到了支持,对于托管在domain foo.com上的jquery应用程序来说,它似乎非常适合于对bar.com进行ajax调用

        2
  •  1
  •   Alconja    14 年前

    不幸的是,同源策略是对浏览器的限制,而不是jQuery的显式部分,所以我怀疑您是否能找到解决这个问题的方法。

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

    至于限制使用JSON,如果您控制服务调用的两端,那么没有理由不使用JSONP样式的使用模式,而实际上不使用JSON。。。服务器响应只会传递给客户端的JavaScript函数,因此无法阻止返回字符串中的XML;然后让您的回调解析&处理这些(尽管,这可能会把你推向真正的“黑客”领域)。

        3
  •  0
  •   Dr.YSG    12 年前

    因为我的WCF应用程序是自托管的(向app.config和web.config添加xml没有帮助),但这是可行的!

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

    --不适用于自托管:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Allow-Origin"
                 value="*" />
          </customHeaders>
        </httpProtocol>
    </system.webServer>