Javascript CORS—服务器如何知道jQueryAjax';s";随附凭证:true";使用了什么?
我正在一个框架中实现CORS(跨源资源共享) 我知道,当使用Jquery的Javascript CORS—服务器如何知道jQueryAjax';s";随附凭证:true";使用了什么?,javascript,jquery,ajax,cors,Javascript,Jquery,Ajax,Cors,我正在一个框架中实现CORS(跨源资源共享) 我知道,当使用Jquery的ajax(…)发出XMLHttpRequest请求,并且withCredentials属性为true时,服务器必须响应这两件事: 访问控制允许凭据:true 访问控制允许来源:[u域] 服务器无法使用通配符响应,访问控制允许源代码::那 我的问题:我如何在服务器上知道已使用了with credentials:true,因此我不使用通配符 我将与credentials:false以及与credentials:true使用
ajax(…)
发出XMLHttpRequest请求,并且withCredentials
属性为true
时,服务器必须响应这两件事:
访问控制允许凭据:true
访问控制允许来源:[u域]
访问控制允许源代码:
:那
我的问题:我如何在服务器上知道已使用了with credentials:true
,因此我不使用通配符
我将与credentials:false
以及与credentials:true
使用时发送的头进行了比较,它们是相同的
那么,如果我确实希望在客户端请求时允许凭据,这是否意味着我永远不能使用访问控制允许源代码:
那么,如果我确实想在客户端请求时允许凭据,这是否意味着我永远不能使用访问控制允许源代码:
对
accesscontrolalloworigin:
的要点是,它允许您只需很少的努力就可以访问每个网站。它让你说“这些数据是公开的,任何人都可以访问”
如果您需要凭据来访问资源,那么说“此数据是公共的,任何人都可以访问它”是没有意义的
如果您要授予对每个网站的访问权限,那么登录您网站的人访问的每个网站都可以从中读取数据(有效地将其公开)
因此,您需要有一个允许访问数据的受信任站点的白名单,然后在明确授予访问权限之前检查源站标题。如果
withCredentials
设置为true,您还应该收到源站域上设置的任何cookie,我不确定这是否适用于初始请求,或者仅在服务器响应了访问控制允许凭据:true
(我可以想象这两种情况都是真的,尽管我认为后者最合理)。至于通配符,我倾向于总是指定允许的域(从源标题)@RogierSpieker当使用with credentials:true进行查询但没有任何cookie时,它也会使用通配符失败。我认为当客户使用带有凭据的时,强制客户发送cookie是不可取的:true
。。。你不知道他的密码的逻辑。所以我认为你不能真的依赖饼干的存在。谢谢你的帮助!我并不是说应该强制设置cookie,只是说如果设置了withCredentials:true
,就会发生这种情况。在这种情况下,cookie的存在将表明with credentials
为true
。我想你是对的!但是我仍然不知道为什么会有人想要使用通配符版本!我的意思是,您只需将请求的Origin
头复制到响应的Access Control Allow Origin
头,这也“授予非常多的网站”,并且您还允许凭据这样做。。。通配符版本是否允许在使用“头复制”技巧时丢失其他内容?您可以将带有静态值的头粘贴到服务器配置中的一行代码中。动态地回显原始标头需要更多的努力。