【问题标题】:Dealing with CORS and Cookie scope across subdomains跨子域处理 CORS 和 Cookie 范围
【发布时间】:2016-11-02 20:41:12
【问题描述】:

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

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

要求:

  1. 站点#1 必须能够通过sub.myDomain.com/handler.ashx 对站点#2 执行AJAX 调用。
  2. 站点 #1 和站点 #2 必须能够读取彼此的 cookie。

这些要求让我想到了以下问题:

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

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

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

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

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

【问题讨论】:

    标签: asp.net cookies cors


    【解决方案1】:

    如果为属性“Access-Control-Allow-Origin”添加“*”,则允许所有站点调用您的处理程序。

    在 www.myDomain.com 处理程序响应中,您必须添加类似这样的内容

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

    这样只有 sub.myDomain.con 可以得到来自 www.myDomain.com 的响应

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 2012-11-30
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 2018-05-04
        • 1970-01-01
        相关资源
        最近更新 更多