4

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

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

要求:

  1. 站点 #1 必须能够通过sub.myDomain.com/handler.ashx.
  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 范围将仅限于子域,而其他人则建议整个域都在范围内(这是我想要的),在这种情况下,我不需要采取任何行动。

4

2 回答 2

2

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

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

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

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

于 2015-04-22T15:43:53.253 回答
0

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

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

于 2013-09-13T11:05:00.410 回答