短链业务,内容是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被提示不安全无法打开怎么办?

史努比博客