HTTPS站点请求localhost HTTP接口触发Mixed Content警告的解决问询
解决HTTPS网站向localhost HTTP服务发起请求的混合内容拦截问题
嗨,这个场景我太熟悉了!Chrome对混合内容的安全拦截虽然很有必要,但对localhost这种本地开发场景确实有点“严苛”。针对你提到的两个思路,我来给你具体讲讲怎么落地:
思路1:给localhost添加混合内容访问例外
这是最省心的方案,不用改任何代码,只需要在Chrome里做个简单设置:
- 打开Chrome的设置页面,搜索「不安全内容」
- 在「允许显示不安全内容」选项下,点击「添加」,输入你的HTTPS网站域名(比如
https://example.com) - 保存设置后刷新页面,就能正常向
http://localhost:5555/command发起POST请求了
如果是本地开发测试,你也可以启动Chrome时加上全局参数(仅开发环境用,正式环境不推荐):
# Windows chrome.exe --allow-running-insecure-content # Mac open -a "Google Chrome" --args --allow-running-insecure-content
思路2:给Bottle.py客户端快速启用HTTPS
其实给本地服务加HTTPS没你想的那么复杂,用自签名证书完全能满足需求,步骤超简单:
- 生成自签名证书:用OpenSSL一行命令搞定(没装OpenSSL的话,大部分系统默认都带,或者装一下就行)
执行时会让你填一些信息,随便填就行,不影响使用。openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyfile key.pem -days 365 - 修改Bottle.py代码启用HTTPS:直接在run方法里传入ssl参数就行
from bottle import Bottle, run app = Bottle() @app.post('/command') def handle_command(): # 你的业务处理逻辑 return "Success" if __name__ == '__main__': run( app, host='localhost', port=5555, ssl={'certfile': 'cert.pem', 'keyfile': 'key.pem'} ) - 信任证书:第一次访问
https://localhost:5555时,Chrome会提示证书不安全,点击「高级」→「继续访问localhost(不安全)」,之后就可以正常从HTTPS网站发起请求了。这个证书可以复用一整年,过期了再重新生成一次就行,完全不麻烦。
两种方案任选其一都能解决问题:如果只是个人开发用,思路1更快;如果需要多人协作或者更规范的环境,思路2也很容易搞定。
内容的提问来源于stack exchange,提问作者Florian Dietz
相关产品推荐
相关产品推荐

