这个现象困扰了我一段时间。比如在Pycharm里面运行一个Flask程序,如图所示
在Chrome中一直打不开,换了Firefox,依然如此,但是用mac自带的safari可以打开。
起初我以为是ip地址的问题,将0.0.0.0换成127.0.0.1和localhost都没有用。
一时在网上没找到答案。
Safari能用就用Safari吧,其它先不管了。
后来使用anaconda及Jupyter Notebook时又出现了同样的情况。不能忍了。
在Stack Overflow上面终于找到了答案,解决方案好简单。
对于Chrome:
1. 打开setting|高级|系统|打开代理设置
2.mac中会自动打开网络设置,如图所示
3. 在‘忽略这些主机与域的代理设置’文本框中加上‘localhost,0.0.0.0,127.0.0.1’,就可以了。
对于Firefox:
1. 打开首选项|高级|网络
2. 点击“配置Firefox如何连接至国际互联网”后面的“设置”
3. 在对话框中选择“使用系统代理设置”,即上面在mac中修改的代理设置。
另外补充localhost,127.0.0.1和0.0.0.0之间的区别
首先看看ping这3者的结果如下
可见localhost与127.0.0.1都可ping通,而0.0.0.0不能被ping通
另外,我们注意到localhost(127.0.0.1)这一栏,说明两种有某种关系。
在打开本机的hosts,可以看到,localhost对应的ipv4和ipv6分别是127.0.0.1和::1.
说明localhost是其域名,用于指代this computer或者this host,可以用来获取运行在本机上的网络服务
而127.0.0.1属于{127,}集合中的一个,而所有网络号为127的地址都被称之为回环地址,取值范围为 127.0.0.1-127.255.255.254
对于 0.0.0.0,它是真正表示“本网络中的本机”。
那它和localhost与127.0.0.1有什么区别呢?打个比方,0.0.0.0就像是章鱼的躯干,而localhost与127.0.0.1好比就是章鱼的腕,章鱼靠腕交流传递信息而不是靠躯干。但是所有的腕都是为同一个躯干服务。
再比如,一台服务器,一个外网地址A,一个内网地址B,如果上面一个web应用绑定的端口指定了0.0.0.0,那么通过内网地址或外网地址都可以访问这个应用。但是如果绑定了内网地址,那么通过外网地址就不能访问。反之同理。