短链业务,内容是http协议在微信等平台无法打开时候的解决办法
原因
微信等平台限制htttp协议的链接,或者已经被平台封禁的域名无法展示。此外iframe嵌套不得出现http或者非域名。
办法一
meta设置此代码块内容,可以保证iframe嵌套非https协议可以在微信等平台展示
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
注意:此设置并非永久,还是会被封,此外内容网页或者服务器也可设置不让嵌套。
方法二
代理:使用node服务编写代理接口
// http代理
router.get('/proxy', api.proxyAPI);
const http = require("http");
const https = require("https");
// 网址代理
exports.proxyAPI = async (req, res) => {
const targetUrl = req.query.url; // 获取前端传入的目标 URL
if (!targetUrl) {
return res.status(400).send('缺少 url 参数');
}
try {
// 验证 URL 格式
const urlObj = new URL(targetUrl);
if (urlObj.protocol !== 'http:' && urlObj.protocol !== 'https:') {
return res.status(400).send('无效的 URL 协议');
}
// 设置响应头,允许 iframe 嵌入
res.setHeader('X-Frame-Options', 'ALLOWALL');
res.setHeader('Content-Security-Policy', "frame-ancestors 'self' *;");
// 将请求代理到目标 URL
req.pipe(request(targetUrl)).pipe(res);
} catch (error) {
res.status(500).send('代理请求失败: ' + error.message);
}
}
<iframe frameborder="0" title="嵌套网址"></iframe>
const proxyBaseUrl = 'https://code.server.wangyinjie.cn/api/admin/proxy';
iframe.referrerpolicy = "strict-origin-when-cross-origin";
iframe.src = `${proxyBaseUrl}?url=${encodeURIComponent(url)}`;
注意:此方法也不是万能
方法三(推荐)
提升http到https。
上一篇
EJS模板引擎助力SSR项目
下一篇
iframe内嵌HTTP被提示不安全无法打开怎么办?