Flask是否可以同时监听IPv4和IPv6(即双重IP堆栈)?据我所知,可以使用以下命令在IPv4上运行:
app.run(host='0.0.0.0', port=80)
但是要想在IPv6上运行,需要使用以下命令:
app.run(host='::', port=80)
这将使Flask应用程序在任何可用的网络接口上均可用。
app.run(host='0.0.0.0', port=port, debug=True)
或使用IPv6
app.run(host='::', port=port, debug=True)
但我还没有找到一种同时在两个IP版本上运行的方法(可以有一个Flask应用程序实例监听IPv4,另一个实例监听IPv6,但两者不能同时监听同一端口)。
谢谢!
更新(额外信息):
根据Sander Steffann的评论(感谢!),我已经开始让我的应用程序在IPv6上进行监听:
* Running on http://[::]:1028/
* Restarting with reloader
接下来使用IPv6和IPv4 curls进行测试:
curl -g [::1]:1028/notify
curl 127.0.0.1:1028/notify
分别获得:
::1 - - [10/Feb/2014 12:04:51] "GET /notify HTTP/1.1" 200 -
::ffff:127.0.0.1 - - [10/Feb/2014 12:05:03] "GET /notify HTTP/1.1" 200 -
我的理解是第二行表明“某些东西”(操作系统?Flask所依赖的底层网络库?)正在将IPv4请求转换成IPv6请求。但我理解这并不等同于在经典的双栈设置中原生支持IPv4,也就是说,我本来希望得到类似这样的结果(当我运行应用程序时会得到这个结果:Running on http://0.0.0.0:1028/
)
127.0.0.1 - - [10/Feb/2014 12:05:03] "GET /notify HTTP/1.1" 200 -