
将图片与视频放到CDN后,浏览器对某些请求(例如通过Canvas绘图、媒体元素跨域资源或带凭证请求)会受限。常见做法是在CDN或源站配置响应头:Access-Control-Allow-Origin,通常设置为具体域名或“*”(不带凭证时可用),并视情况配置 Access-Control-Allow-Credentials。同时确保CDN缓存这些响应头,避免每次都回源检查。
1)对静态资源返回 Access-Control-Allow-Origin:例如指定 https://example.com。 2)如果需要带Cookie或认证,必须返回 Access-Control-Allow-Credentials: true 并且不能使用“*”。 3)在CDN下配置自定义响应头传递,保证边缘节点缓存该头。
当你在页面上用Canvas绘制外部图片时,必须保证图片返回合适的CORS头,否则Canvas读像素会抛出跨域错误。
良好的缓存策略能显著降低首次和重复访问的加载时间。核心是区分可长期缓存的静态资源(如图标、版本化图片)与需要频繁更新的资源(如用户上传的视频缩略图)。使用 Cache-Control 配合合理的过期时间(max-age、immutable)能让浏览器直接从本地或CDN边缘快速响应。
静态资源使用长缓存(例如一年),并通过文件名或查询字符串版本化;动态或易变资源设置短缓存或使用 stale-while-revalidate 以在后台刷新。
启用边缘缓存、压缩(gzip/ Brotli)、图片格式转换(WebP/AVIF)以及按需分片(Range请求支持)能显著提升大文件如视频的体验。
常用且实用的头包括 Cache-Control、Expires、ETag 和 Last-Modified。建议对不可变资源使用:Cache-Control: public, max-age=31536000, immutable;对可变资源使用短期 max-age 并结合 ETag 或 Last-Modified 用于条件请求。
1)大文件视频可以用较短的浏览器缓存,但利用CDN边缘长时间缓存并配置回源校验。2)对需要回滚的资源,优先使用版本化文件名避免复杂的缓存清理。
不要在响应同时设置互相冲突的缓存头,比如同时设置短期Expires但长max-age,这会造成不确定行为。
推荐使用资源版本化(fingerprint)、CDN缓存失效API和短期缓存策略组合。版本化文件名(例如 image.v1234.jpg)可以让你对长期缓存资源放心设置长过期时间;当需要更新时上传新文件并替换引用即可,无需主动清缓存。对于紧急回滚或热修复,使用CDN提供的API进行路径或前缀刷新。
CI/CD 在发布时生成资源哈希并更新引用,部署完成后可调用 CDN 清理接口或仅更新路由以最小化回源压力。
关键技巧包括:1)开启HTTP/2或HTTP/3以减少请求延迟;2)将静态资源独立到不同域名或子域以减少Cookie传输;3)对图片启用按需格式转换(AVIF/WebP)与自动压缩;4)对视频使用分段(HLS/DASH)并利用CDN边缘缓存切片;5)利用预连接(preconnect)、预加载(preload)提示关键资源。
配合资源优先级设置(例如 preload 关键图像/首帧视频)和 lazy-loading 非关键媒体,可以显著改善首次渲染时间与感知速度。