问询crossorigin="use-credentials"属性发送用户凭据时的作用机制
关于crossorigin属性工作逻辑的正误判定
你的认知存在明显偏差,crossorigin的实际运行逻辑和你理解的内容不一致,核心区别如下:
crossorigin本质是HTML层面用于声明跨域资源CORS(跨源资源共享)请求规则的属性,本身不直接决定「是否发送用户数据」:- 当属性值设为
anonymous(默认值,仅写crossorigin不赋值时默认采用该值)时,跨域请求不会携带Cookie、HTTP认证信息等用户凭证 - 只有当属性值显式设为
use-credentials时,跨域请求才会携带对应域下的用户凭证
- 当属性值设为
- 服务器的校验规则和你理解的「匹配用户信息允许资源访问」逻辑完全独立:
浏览器层面的CORS校验只看服务器返回的响应头是否符合规则:如果请求携带了用户凭证,服务器必须同时返回Access-Control-Allow-Credentials: true、且Access-Control-Allow-Origin为明确的请求源地址(不能为通配符*),满足这两个条件后浏览器才会放行资源给前端使用。 - 服务器侧的用户身份校验属于业务逻辑范畴,和
crossorigin属性没有绑定关系:哪怕服务器识别到了用户身份返回了资源内容,只要CORS响应头不符合要求,浏览器依然会拦截资源,不允许前端访问。
可以通过简单示例辅助理解:
你配置了<img src="https://other-domain.com/avatar.png" crossorigin="use-credentials">,该请求会携带other-domain.com下的Cookie:
- 服务器可以读取Cookie做用户身份校验,返回对应用户的头像内容,这一步属于业务逻辑范畴
- 浏览器会先检查响应的CORS头是否符合要求,如果不符合,哪怕头像内容已经正常返回,也会抛出跨域错误,不让前端正常加载展示该图片。
内容的提问来源于stack exchange,提问作者Samvel Ghumashyan
相关产品推荐
相关产品推荐

