2
0
热心网友
CORS 通过控制 Access-Control-Allow-Origin 控制哪些域名可以共享资源,取值如下
CORS
Access-Control-Allow-Origin
Access-Control-Allow-Origin: <origin> | *
其中 * 代表所有域名,origin 代表指定特定域名,那如何设置多个域名了?
*
origin
此时需要通过代码实现,根据请求头中的 Origin 来设置响应头 Access-Control-Allow-Origin,那 Origin 又是什么东西?
Origin
并不是所有请求都会自动带上 Origin,在浏览器中带 Origin 的逻辑如下
逻辑理清楚后,关于服务器中对于 Access-Control-Allow-Origin 设置多域名的逻辑也很清晰了
Access-Control-Allow-Origin: <Origin>
使用伪代码实现如下:
// 获取 Origin 请求头 const requestOrigin = ctx.get('Origin'); // 如果没有,则跳过 if (!requestOrigin) { return await next(); } // 设置响应头 ctx.set('Access-Control-Allow-Origin', requestOrigin)
此时可以给多个域名控制 CORS,但此时假设有两个域名访问 static.shanyue.tech 的跨域资源
static.shanyue.tech
foo.shanyue.tech
Access-Control-Allow-Origin: foo.shanyue.tech
bar.shanyue.tech
Access-Control-Allow-Origin: bar.shanyue.tech
看起来一切正常,但如果中间有缓存怎么办?
此时,Vary: Origin 就上场了,代表为不同的 Origin 缓存不同的资源
Vary: Origin
CORS 如何指定多个域名?
根据请求头中的 Origin 来设置响应头 Access-Control-Allow-Origin,思路如下
使用伪代码实现如下
// 获取 Origin 请求头 const requestOrigin = ctx.get('Origin'); ctx.set('Vary', 'Origin') // 如果没有,则跳过 if (!requestOrigin) { return await next(); } // 设置响应头 ctx.set('Access-Control-Allow-Origin', requestOrigin)
使用道具 舉報
本版積分規則 發表回覆 回帖並轉播 回帖後跳轉到最後一頁
相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com
Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.