记录通过vue-pdf实现打印文件预览功能遇到问题:跨域、https时不能使用http获取pdf、证书认证不通过
报错解释:
这个报错是由于浏览器的同源策略导致的。当你尝试从一个使用HTTPS的页面去请求一个使用HTTP的资源时,浏览器会阻止这种请求,因为它被认为是不安全的。为了保护用户隐私和安全,现代浏览器实施了严格的同源策略。
解决方法:
- 确保请求的资源URL使用与页面相同的协议(HTTPS)。
- 如果你控制资源服务器,可以在服务器上设置CORS(跨源资源共享)策略,允许特定的HTTPS网站进行资源访问。
- 如果你不能修改服务器配置,可以在服务器上设置一个代理服务,由这个代理服务去请求资源,然后再将结果返回给客户端。代理服务可以是使用相同协议的服务器。
- 另一个解决方案是将PDF文件转换为Base64编码,然后直接在前端进行展示,避免跨域请求。
示例代码(使用代理):
// 在客户端发起请求时,将URL指向你的代理服务
this.$http.get('https://your-proxy-server.com/path/to/pdf')
.then(response => {
// 假设你的代理服务返回的是一个PDF文件的数据流
let pdfData = response.data;
// 使用vue-pdf插件加载PDF
this.pdfData = pdfData;
})
.catch(error => {
console.error('Error fetching the PDF: ', error);
});
// 在你的代理服务端,你需要实现一个接口去请求原始的HTTP资源,然后返回给客户端。
// 伪代码示例,具体实现依赖于你的代理服务器技术栈
app.get('/path/to/pdf', (req, res) => {
http.get('http://original-resource-server.com/path/to/pdf', response => {
response.pipe(res);
});
});
确保你的代理服务安全可靠,不会引入其他的安全问题。
评论已关闭