ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

S3 CORS 配置避坑:跨域报错一次修好

S3 CORS 配置避坑:跨域报错一次修好 S3 CORS 配置避坑跨域报错一次修好【免费下载链接】aws-devops-zero-to-heroAWS zero to hero repo for devops engineers to learn AWS in 30 Days. This repo includes projects, presentations, interview questions and real time examples.项目地址: https://gitcode.com/GitHub_Trending/aw/aws-devops-zero-to-hero页面刷出来是白屏F12 一打开控制台满屏红字Access to image at https://xxx.s3.amazonaws.com has been blocked by CORS policy。资源明明存在、单独开一个标签页还能正常加载偏偏嵌进页面就不行——这就是跨域资源共享CORS没配对导致的经典翻车现场。这里只讲 S3 桶这一侧的修法从最小配置到生产白名单配完再把高频报错对一遍。如果你正被前端图片加载失败、或上传时的预检请求OPTIONS 卡住可以跟着下面动手。看懂浏览器拦截跨域的原理浏览器规定A 域名的页面要读 B 域名的资源响应里必须带Access-Control-Allow-Origin头且取值匹配 A 的源才把数据交给前端代码。S3 桶默认不下发这个头所以跨域一失败就得去桶上主动配规则。类比小区门禁访客刷卡能进大楼但没开他权限内楼层的门电梯到不了那一层数据也一样被拦在走廊里。一个判断口诀直接开 URL 能加载、页面里加载失败问题就在桶的跨域头上。拆三类最常撞上的场景前端页面直接引用 S3 里的图片页面域名和桶域名一不同图片就裂开。桶必须声明接受哪个来源把页面域名含协议和端口原样写进白名单即可。用 CloudFront 在 S3 前面分发静态资源浏览器看到的来源变成了 CDN 域名规则里没写它用户换个入口访问照样报跨域错。前端 JS 直接向桶 PUT 上传文件浏览器会先发一次 OPTIONS 预检请求方法列表里少一个 PUT 或 OPTIONS上传在第一步就失败别忘了同步确认桶策略允许匿名写。动手配置跨域规则规则是一段 JSON在 桶 → 权限 → 跨域资源共享 面板粘贴保存命令行等价命令如下aws s3api put-bucket-cors \ --bucket your-bucket-name \ --cors-configuration file://cors.jsonfile:// 前缀不能漏否则报参数错。最小可用配置先把页面跑起来开发验证阶段用它只放行自己的域名和 GET。{ CORSRules: [ { AllowedHeaders: [*], AllowedMethods: [GET], AllowedOrigins: [https://your-domain.com] } ] }AllowedOrigins 要带协议头裸域名会被静默忽略。生产白名单配置方法收紧为只读上线前收紧方法只留只读显式带上 OPTIONS。{ CORSRules: [ { AllowedHeaders: [Content-Type, Authorization], AllowedMethods: [GET, HEAD, OPTIONS], AllowedOrigins: [https://your-domain.com], ExposeHeaders: [ETag], MaxAge: 3600 } ] }MaxAge 是预检缓存秒数填 0 会让复杂请求多跑一次 OPTIONS。进阶放开前端直传要浏览器直传文件时追加一条放行写方法的规则。{ CORSRules: [ { AllowedHeaders: [Content-Type, x-amz-acl], AllowedMethods: [PUT, POST], AllowedOrigins: [https://your-domain.com], // MaxAge: 3600 } ] }规则加进 CORSRules 数组保存前删掉注释行。按报错现象排错遇到报错先别乱猜按现象对号入座多数问题一次粘贴或一条命令就能修好。现象最可能原因一步修复No Access-Control-Allow-Origin header桶上没配 CORS 规则按最小可用配置贴一条规则直接开 URL 正常页面里报 403请求来源没在白名单里把实际来源域名含端口加进 AllowedOriginsPUT 直传失败提示预检被拒OPTIONS/PUT 不在方法列表给 AllowedMethods 补上 OPTIONS 和 PUT配置正确但页面仍报错浏览器缓存了旧预检结果CtrlShiftR 强刷或等 MaxAge 过期挂 CloudFront 后新域名报错来源变成了 CDN 域名规则里把 CDN 域名也加进白名单如果两行都试完还不行九成是规则没落在正确的桶上——多桶架构里很容易改错地方保存后回控制台把 CORS 面板再确认一遍。遇到 403 也别急着怀疑 IAM 权限先排除跨域头的问题顺序反了会绕远路。静态网站托管场景下桶策略和 CORS 是两套东西可参考 static-website-basic.json 对比检查。下一步建议先贴最小配置把链路跑通再逐步收紧成生产白名单。桶的基础操作回顾可以看 S3 入门笔记。改完规则记得回页面强刷验证一次别只信控制台里的配置。【免费下载链接】aws-devops-zero-to-heroAWS zero to hero repo for devops engineers to learn AWS in 30 Days. This repo includes projects, presentations, interview questions and real time examples.项目地址: https://gitcode.com/GitHub_Trending/aw/aws-devops-zero-to-hero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表