使用Puppeteer转换Base64 HTML到PDF时遇ERR_BLOCKED_BY_ORB及CORS问题
解决方案:Base64 HTML转PDF时的图片加载与CORS问题
针对你遇到的net::ERR_BLOCKED_BY_ORB错误和Google字体CORS问题,给出以下针对性解决方法:
1. 给页面设置合法Base URL(核心解决方法)
用page.setContent加载纯HTML字符串时,页面默认没有origin,这会触发ORB的跨源拦截,同时导致Cookie无法正确匹配域名,也会引发Google字体的CORS校验失败。给页面设置对应域名的baseURL,让页面拥有合法的源:
修改Puppeteer代码中的setContent调用:
await page.setContent(htmlContent, { baseURL: 'https://mysubdomain.domain.com' // 替换为你的图片服务器域名 });
同时确认Cookie配置:你的Cookiedomain设为.mysubdomain.domain.com是正确的,若本地测试用HTTP,secure: false没问题;线上HTTPS环境需将secure改为true。
2. 添加Authorization请求头解决403权限问题
如果你的Spring服务器同时校验请求头中的JWT令牌(而非仅依赖Cookie),给页面全局设置请求头:
// 在page.setCookie之后添加 await page.setExtraHTTPHeaders({ 'Authorization': `Bearer ${jwtToken}` // 格式根据Spring服务器的认证规则调整 });
3. 临时禁用ORB与Web安全(仅测试环境用)
若上述方案无效,可临时调整Chromium启动参数绕过限制(生产环境不推荐,存在安全风险):
const browser = await puppeteer.launch({ headless: false, args: [ "--no-sandbox", "--disable-web-security", "--disable-features=OriginRestrictionsBypassPolicy,IsolateOrigins,site-per-process" ], });
额外检查项
- 验证JWT有效性:用Postman携带该令牌请求图片URL,确认能正常返回图片,排除令牌过期或权限不足的问题。
- 检查Spring服务器CORS配置:确保服务器允许你设置的
baseURL作为源访问图片资源。 - 确认图片路径:若HTML中是相对路径,
baseURL需能正确拼接成完整的图片访问地址。
内容的提问来源于stack exchange,提问作者Wil
相关产品推荐
相关产品推荐

