跨子域处理CORS和Cookie范围

时间:2013-08-23 14:32:53

标签: asp.net cookies cors

我很难协调StackOverflow和其他来源中有关跨子域使用调用的一些冲突信息。考虑这两个共享一个共同域的独立站点:

  • 网站#1:www.myDomain.com
  • 网站#2:sub.myDomain.com

要求:

  1. 站点#1必须能够通过sub.myDomain.com/handler.ashx对站点#2执行AJAX调用。
  2. 网站#1和网站#2必须能够读取彼此的Cookie。
  3. 这些要求引出了以下问题:

    1. 位于sub.myDomain.com/handler.ashx的处理程序代码是否需要更改其响应标头以允许CORS?我知道我可以编写这样的调用:< / p>

      resp.Headers.Add("Access-Control-Allow-Origin","*");
      

      ...但是根据我的阅读,这会将处理程序暴露给所有域。我只想限制来自*.myDomain.com的调用。如果我根本不包含CORS标题怎么办?什么是默认行为?

    2. 网站#1和/或网站#2是否需要调整HttpCookie的Domain属性才能让两个网站读取彼此的Cookie?

      如果我根本不触及域属性该怎么办?什么是默认行为?一些论坛回复表明cookie范围将仅限于子域,而其他人建议整个域都在范围内(这就是我想要的),在这种情况下我不需要采取任何行动。

2 个答案:

答案 0 :(得分:2)

如果你添加&#34; *&#34; for attribute&#34; Access-Control-Allow-Origin&#34;您允许所有站点呼叫您的处理程序。

在www.myDomain.com处理程序响应中你必须添加类似这样的东西

    context.Response.AppendHeader("Access-Control-Allow-Origin",   "sub.myDomain.com");

通过这种方式,只有sub.myDomain.con可以获得www.myDomain.com的回复

答案 1 :(得分:0)

CORS规范是全有或全无。它可以支持*,null或确切的域:http://www.w3.org/TR/cors/#access-control-allow-origin-response-header

在您的ASHX处理程序中,您需要使用正则表达式验证原始标头,然后您可以在Access-Control-Allow-Origin响应标头中回显原始值。