VS Code Markdown预览无法加载本地Flask站点图片的原因排查
VS Code Markdown预览无法加载本地Flask站点图片的原因排查
我来帮你梳理这个问题的核心原因,你遇到的情况其实很典型——VS Code的Markdown预览环境有安全策略限制,会阻止加载非HTTPS的内网/本地HTTP资源,这就是为什么你直接在浏览器能打开图片,但预览里显示不出来的关键。
具体原因拆解:
- 内容安全策略(CSP)限制:VS Code的Markdown预览是运行在一个沙盒化的浏览器环境里,默认的安全规则会拦截来自HTTP协议的不安全资源,尤其是像你用的
10.200.40.182这类内网IP提供的图片。哪怕你直接点击Markdown里的链接能在系统浏览器打开,但预览器的安全阈值更高,会直接阻止加载这类资源。 - 外部HTTPS图片能正常显示的对比:你提到的shields.io、GitHub的图片都是通过HTTPS协议提供的,完全符合VS Code预览器的安全策略,所以能正常渲染。
验证与解决方法:
临时放宽预览安全设置(用于测试):
打开VS Code的设置(快捷键Ctrl+,),搜索Markdown: Preview Security Settings,把选项改成Allow Insecure Content,然后重新打开Markdown预览。这时候你应该能看到Flask站点的图片正常显示了。注意:这个设置是全局的,长期保持可能有安全风险,测试完建议改回默认的
Strict。把Flask站点改成HTTPS(推荐长期方案):
如果你需要长期在Markdown里预览这些图片,最好给Flask配置HTTPS。可以用自签名证书临时测试,比如:from flask import Flask app = Flask(__name__) # 启动时指定证书和密钥 if __name__ == '__main__': app.run(ssl_context=('cert.pem', 'key.pem'))生成自签名证书可以用OpenSSL命令:
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365之后用HTTPS的链接(比如
https://10.200.40.182:5050/...)在Markdown里引用图片,就能在VS Code预览里正常加载了,同时也更安全。
排除其他可能:
你提到直接点击Markdown里的链接能在浏览器打开,说明图片的路径、Flask的路由逻辑(不管是Method1的直接返回文件,还是Method2的渲染模板)都是完全没问题的,所以不用怀疑路径或代码的问题,核心就是VS Code预览的安全限制。
内容来源于stack exchange




