更好地理解Ajax CORS

更好地理解Ajax CORS,ajax,cors,Ajax,Cors,我有3个领域需要合作… 我的流程基本上是这样工作的: 用户访问A.com A.com设置cookie并重定向到B.com B.com ajaxs呼叫需要根据请求将cookie发送到C.com 如何“我能”/“我应该”实现此行为 我在B.com ajax中设置了xhrFields“withCredentials:true”,但是使用fiddler检查请求时,没有发送cookie 我有点迷路了。。。如果需要额外的信息,请询问 看看我的答案 如果您正在设置with credentials标志,则请求“

我有3个领域需要合作…
我的流程基本上是这样工作的:

  • 用户访问A.com
  • A.com设置cookie并重定向到B.com
  • B.com ajaxs呼叫需要根据请求将cookie发送到C.com
  • 如何“我能”/“我应该”实现此行为

    我在B.com ajax中设置了xhrFields“withCredentials:true”,但是使用fiddler检查请求时,没有发送cookie

    我有点迷路了。。。如果需要额外的信息,请询问

    看看我的答案

    如果您正在设置
    with credentials
    标志,则请求“可能”已被预引导。这意味着在发送实际请求之前,浏览器正在发送一个
    OPTIONS
    请求。该
    选项
    请求的响应将决定是否允许/拒绝实际请求

    ---编辑---

    无论飞行前选项请求如何,只有在响应头上带有
    withCredentials
    标志的请求才会成功,前提是响应头上带有
    Access Control Allow Credentials
    ,并且允许尝试发出请求所需或包含的来源、方法和任何头


    那是科尔斯。因此,所有域(a、b、c等)之间的请求都是相同的。

    默认情况下,经认证的请求不会预处理。请求中是否存在Cookie不是确定请求是否将被预引导的一部分。请求只有在包含非简单方法或非简单标题时才会被预引导。我稍微修改了我的答案,但是,
    withCredentials
    标志表示应该在服务器接收到
    OPTIONS
    请求的前提下预先触发请求,以通知客户端是否按照规范的要求允许使用凭据,如前所述否,这是不正确的。withCredentials与请求是否预引导无关。我认为您误读/误解了规范。只有在请求包含非简单头或非简单方法的情况下,才会预先触发请求。例如,如果已认证的请求是具有简单头的GET请求,则它不会被预引导。在这种情况下,将发送一个请求(底层请求),服务器必须包括一个访问控制允许原始标头和一个访问控制允许凭据标头。您链接到的文章也演示了这一点。无论如何,解决方案是确保响应包含正确的标题。是的,我完全同意。哪个cookie转到
    c.com
    ?来自
    A
    C
    的cookie自己的cookie?我需要A.comCookie设置的cookie,cookie将只发送到原始域。如果在
    a.com
    上设置cookie,浏览器将不会将其发送到
    c.com
    。您可以在
    a.com
    上创建一个web方法,将cookie值作为JSON发回(
    Access Control Allow Origin:b.com
    ),并创建一个类似的方法,允许在
    c.com
    上的web方法上设置此cookie。