Fecth 跨域问题

本文探讨了Fetch API中跨域请求时CORS协议与凭据模式的关系。介绍了如何设置请求的凭据模式,以及这对CORS预检请求的影响。服务器开发者需要谨慎处理凭据共享,以防止安全问题。文中提到了`Access-Control-Allow-Origin`、`Access-Control-Allow-Credentials`等关键头部的作用。
CORS协议和凭据

请求凭据模式为“ include”时,它对CORS协议的功能有影响,但不包括抓取中的凭据

在过去,XMLHttpRequest可以将请求凭据模式设置为“ include”:

var client = new XMLHttpRequest()
client.open(“GET”,“./”)
client.withCredentials = true
/ * ... * /

现在fetch("./", { credentials:"include" }).then(/* … */)就够了

请求凭证模式是不是在服务器上可观察到的必然; 只有当凭证用于存在请求可以将它凭借的可观察到的证书被包括。请注意,即使如此,CORS-preflight请求也不包括凭据

因此,服务器开发人员需要决定是否可以共享具有凭据的响应“污点” 而且还需要决定是否请求迫使一个CORS-预检要求可以包括凭证。一般来说,分享答复和允许具有凭证的请求是相当不安全的,并且必须非常小心以避免混淆的副作用问题

为了分享回应凭据时,` Access-Control-Allow-Origin`和` Access-Control-Allow-Credentials是很重要的。下表用于说明请求的各种合法和非法组合https://rabbit.invalid/

请求的凭据模式 Access-Control-Allow-Origin` Access-Control-Allow-Credentials` 共享? 笔记
“ omit *` 省略了 -
“ omit *` true` 如果凭据模式不是“ include”,那么` Access-Control-Allow-Credentials`被忽略。
“ omit `https://rabbit.invalid/` 省略了 序列化的起始点没有尾部斜杠。
“ omit `https://rabbit.invalid` 省略了 -
“ include *` true` 如果凭据模式是“ include”,那么` Access-Control-Allow-Origin`不能是` *`。
“ include `https://rabbit.invalid` true` -
“ include `https://rabbit.invalid` True` true`是(字节)区分大小写。

类似地,当请求凭据模式不是“ ” 时,` Access-Control-Expose-Headers`,` Access-Control-Allow-Methods`和` Access-Control-Allow-Headers`响应头只能使用` *`作为值。include

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值