当前位置: 首页 > news >正文

crossOriginLoading使用说明

1. 说明

此配置用于控制 Webpack 动态加载的代码块(chunk)(例如代码分割或懒加载的模块)在跨域(不同域名)加载时的行为。它通过为动态生成的 <script>标签添加 crossorigin 属性,确保符合跨域资源共享(CORS)的安全策略

可选值

  • false(默认值)😗
    不添加 crossorigin 属性到动态加载的 <script> 标签。
    适用场景:资源与主应用同域(无跨域需求)
  • anonymous:
    为 <script> 标签添加 crossorigin=“anonymous” 属性。
    请求行为:不携带凭据(如 Cookies、HTTP 认证信息)。
    服务器要求:响应头需包含 Access-Control-Allow-Origin: * 或明确允许请求的来源域名。
  • use-credentials:
    为 <script> 标签添加 crossorigin=“use-credentials” 属性。
    请求行为:携带凭据(如 Cookies、HTTP 认证信息)
    服务器要求:响应头需满足:
    Access-Control-Allow-Origin: <具体来源域名>(不能为 *)
    Access-Control-Allow-Credentials: true

2. 使用场景

具体使用场景示例:主应用与 CDN 跨域加载静态资源
场景描述

  • 主应用:部署在 https://my-app.com
  • 静态资源(Webpack 打包后的 JS/CSS 文件)托管在 CDN:https://cdn.my-app.com。
  • 问题:

当浏览器加载 CDN 上的 JS 文件时,控制台报错:
Access to script at ‘https://cdn.my-app.com/main.js’ from origin ‘https://my-app.com’
has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present.

解决方案

  1. Webpack 配置

在 webpack.config.js 中启用跨域加载策略:
module.exports = {
output: {
publicPath: “https://cdn.my-app.com/”, // 资源托管在 CDN
crossOriginLoading: “anonymous”, // 添加 crossorigin=“anonymous”
},
};

  1. Webpack 会为动态加载的 <script> 标签添加 crossorigin=“anonymous” 属性

<script src=“https://cdn.my-app.com/main.js” crossorigin=“anonymous”></script>

  1. CDN/服务器配置
    3.1 在 CDN(如 AWS S3、阿里云 OSS)或 Nginx 服务器中配置 CORS 响应头

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET

3.2(若使用 use-credentials,需指定具体域名并开启 Access-Control-Allow-Credentials: true)

3. 验证效果

  1. 浏览器 Network 面板
  • 检查 JS 文件的请求头:

Origin: https://my-app.com

  • 检查响应头:

Access-Control-Allow-Origin: *

  1. 错误信息捕获
  • 启用 crossOriginLoading 后,通过 window.onerror 可捕获更详细的跨域脚本错误:

window.onerror = function (message, source, lineno, colno, error) {
console.log(“脚本错误详情:”, error);
};

http://www.xdnf.cn/news/157627.html

相关文章:

  • 达芬奇模板 15组现代简洁文字标题动画 Modern Titles v2.0 DR
  • 搭建基于火灾风险预测与防范的消防安全科普小程序
  • 客户案例 | 光热+数智双驱动!恒基能脉的数字化协同与技术创新实践
  • 启动 n8n 步骤指南
  • x86系列CPU寄存器和汇编指令总结
  • 【新技术】微软 Azure Test Impact Analyzer (TIA) 全面解析
  • Python Cookbook-6.10 保留对被绑定方法的引用且支持垃圾回收
  • Spark 极速回顾
  • AIGC在游戏开发中的革命:自动化生成3A级游戏内容
  • 如何使用WebRTC
  • Cisco Packet Tracer使用 搭建网络拓扑
  • 3、LangChain基础:LangChain Tools Agent
  • 【Kafka】Windows环境下生产与消费流程详解(附流程图)
  • proxychains4系统代理for linux(加速国内github下载速度,pip安装)
  • pytorch python常用指令
  • 2025.04.26-美团春招笔试题-第二题
  • 线性代数(一些别的应该关注的点)
  • 立创EDA
  • 25【干货】在Arcgis中根据字段属性重新排序并自动编号的方法(二)
  • 【AI论文】VisuLogic:评估多模态大语言模型中视觉推理的基准
  • MySQL 中 SQL 语句的详细执行过程
  • Windows 安装 Neo4j 教程
  • 【Android】四大组件之Activity
  • 深入解析Spring Boot配置处理器:机制、架构与实践
  • 7.13 GitHub Sentinel全链路测试实战:自动化框架+零误差传输,QPS提升6倍!
  • 《C#数据结构与算法》—二分查找法和顺序查找
  • 365打卡第R3周: RNN-心脏病预测
  • 代码随想录算法训练营第60期第十八天打卡
  • thinking-intervention开源程序用于DeepSeek-R1等推理模型的思维过程干预,有效控制推理思考过程
  • RAG技术与应用---0426