JS HTTP请求中send credentials的含义、影响范围及相关疑问
Fetch API中
credentials参数的影响范围详解 我来明确拆解credentials参数的作用细节,以及它到底会影响哪些内容:
一、credentials的三个可选值基础行为
credentials核心控制的是浏览器自动管理的用户凭据在请求中的携带规则,三个值的逻辑如下:
omit:请求中完全不包含任何浏览器自动管理的凭据same-origin:仅当请求的目标地址与当前页面同源时,才携带凭据include:无论同源还是跨域请求,都携带凭据(跨域场景下必须配合服务器端返回Access-Control-Allow-Credentials: true响应头,否则浏览器会拒绝接收响应)
二、受影响的凭据类型
根据Fetch规范的定义,credentials会作用于以下三类浏览器自动管理的凭据:
- Cookie:所有与请求目标域匹配的Cookie(包括会话Cookie和持久Cookie),只要浏览器存储了对应域的Cookie,就会按规则决定是否携带
- HTTP Basic/Digest认证信息:浏览器保存的用于HTTP基础/摘要认证的用户名密码,这类信息会通过
Authorization头自动发送,受credentials控制 - TLS客户端证书:如果请求的目标服务器要求客户端证书认证,
credentials设置会控制浏览器是否使用已安装的对应证书
三、关于Authorization头的疑问
分两种情况:
- 浏览器自动生成的
Authorization头(比如Basic Auth的认证信息):受credentials设置影响,会根据规则决定是否发送 - 开发者手动添加的
Authorization头(比如JWT的Bearer Token):不受credentials控制,因为这属于自定义请求头,不属于浏览器自动管理的凭据范畴
四、关于Cookie的疑问
credentials会影响所有符合目标域规则的Cookie,不存在“仅携带特定凭据Cookie”的区分。只要浏览器中存储了请求目标域的Cookie,就会按照credentials的设置决定是否在请求中携带。
五、官方规范的明确说明
Fetch规范中直接定义了credentials的作用范围:
HTTP cookies, HTTP authentication, and client-side SSL certificates.
这段定义清晰覆盖了所有受影响的凭据类型,是最权威的参考依据。
内容的提问来源于stack exchange,提问作者Matt Ruwe
相关产品推荐
相关产品推荐

