使用凭证进行跨源资源共享

时间:2011-11-10 03:27:54

标签: http cors

我在多个子域(example.com,blog.example.com和app.example.com)上有一个通用的身份验证表单。登录表单必须将此数据提交到example.com,无论它在何处显示,所以我想到使用CORS,但是这个:

header("Access-Control-Allow-Origin: http://example.com http://blog.example.com http://app.example.com")

does not work

所以我想做下一件事,并在服务器端手动检查Origin标头,并允许Access-Control-Allow-Origin: *以便可以发出请求,但不幸的是,这会出现in the MDN

  

重要说明:在响应凭证请求时,服务器必须指定域,并且不能使用通配符。

有没有办法让我的请求跨多个域工作,仍然使用CORS发送凭据?

2 个答案:

答案 0 :(得分:41)

两个想法:

1)你还包括“Access-Control-Allow-Credentials:true”标题吗?这是传递cookie凭据所必需的(相应的XHR客户端必须设置.withCredentials = true)

2)您是否尝试过链接中的建议并仅包含当前请求的来源。例如,如果请求带有标题“Origin:http://blog.example.com”,您将回复“Access-Control-Allow-Origin:http://blog.example.com”,而不是原始列表。这需要在服务器端实现更多的工作。

3)另外一个想法,你提到你有一个必须由各个域共享的登录表单。好吧,如果它是标准的HTML表单,您可以跨域进行常规表单发布。您不需要使用CORS。只需将表单的“action”属性设置为您要发布到的URL即可。例如:

<form name="login" action="http://login.example.com/doLogin">

答案 1 :(得分:0)

// cross domain
header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Credentials: true');
相关问题