同源策略不干预html标签加载,仅限制javascript读取跨域响应;等可正常跨域加载,但js访问其内容、fetch请求或读取dom/cookie时受阻,需服务端配置cors、使用postmessage或代理解决。

同源策略本身不会被HTML跨域“拖慢”,它压根不参与HTML标签的加载过程——浏览器对 <img>、<script></script>、<link>、<iframe></iframe> 这类标签的请求,根本不执行同源策略校验。
真正卡顿或出问题的地方,是后续 JavaScript 尝试读取响应内容时被拦住,或者服务端没配好 CORS 导致预检失败重试。
<script></script> 和 <img> 跨域加载快,但 JS 读不到数据
- 浏览器会正常发起请求、下载资源、渲染图片或执行脚本(只要服务端返回合法 JS)
- 但如果你用
fetch()或XMLHttpRequest去请求同一张图或同一个接口,就会触发同源策略检查 <script src="@#@#@#@#@#@#@#@#@#@0;%20%E8%83%BD%E5%8A%A0%E8%BD%BD%E6%88%90%E5%8A%9F%EF%BC%8C%E4%B8%8D%E4%BB%A3%E8%A1%A8%E4%BD%A0%E8%83%BD%E7%94%A8%20fetch("> 拿到 JSON</script>- 常见错误现象:控制台没报错,图片显示了,但 JS 里想用
document.querySelector('img').src读取跨域图片尺寸?不行,crossOrigin不设或设错会导致canvas.toDataURL()报SecurityError
<iframe></iframe> 加载跨域页面不卡,但 JS 访问立即被拦
<iframe src="@#@#@#@#@#@#@#@#@#@2;%20%E4%BC%9A%E6%AD%A3%E5%B8%B8%E5%8A%A0%E8%BD%BD%E5%B9%B6%E6%98%BE%E7%A4%BA- %E4%BD%86%E7%88%B6%E9%A1%B5%20JS%20%E6%89%A7%E8%A1%8C%20
iframe.contentDocument%20%E6%88%96%20iframe.contentWindow.document%20%E4%BC%9A%E7%9B%B4%E6%8E%A5%E6%8A%9B%E9%94%99%EF%BC%9ABlocked%20a%20frame%20with%20origin%20" from accessing a cross-origin frame></iframe> - 即使加了
allow-same-originsandbox 属性也没用——该属性只对同源 iframe 生效 - 如果必须通信,只能用
postMessage(),且必须在接收端严格校验event.origin,不能写成'*'
表单 <form></form> 提交跨域不触发同源策略,但无法获取响应
-
<form action="@#@#@#@#@#@#@#@#@#@4" method="POST"></form>可以照常提交,浏览器绝不拦截 - 问题在于:提交后页面跳转,或目标页写入
<iframe></iframe>,你都无法用 JS 拿到服务器返回的 JSON 或状态码 - 若需异步反馈,必须让服务端支持 CORS,并改用
fetch()或axios;否则只能走同域中转代理(如/api/forward)
关键点其实就一个:同源策略不是网络层的延迟开关,它是 JS 运行时的一道门禁。HTML 标签能“进门”,但 JS 想“进屋翻抽屉”就得看门禁是否放行——而这取决于服务端头(Access-Control-Allow-Origin 等)是否配对、是否覆盖了你的 origin、是否漏了 Access-Control-Allow-Headers(比如忘了加 Authorization)。很多人调不通,卡在预检(OPTIONS)静默失败,连错误都看不到。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











