你的位置:首页 > Java教程

[Java教程]127.0.0.1 和 localhost


  最近在部署一个项目时,出了问题,导致通过ajax访问后台是json不能被返回回来,通过浏览器的开发工具查看,有下面这样的错误提示,很是让我头疼。

SEC7120: 在 Access-Control-Allow-Origin 标头中未找到源 http://127.0.0.1:8080。SCRIPT7002: 0x80700013, 由于出现错误 80700013 而导致此项操作无法完成。

  通过百度,得知这是跨域所引起的问题,当时想明明ajax是访问本机的服务器,怎么会是跨域呢?于是去设置浏览器跨域,并没有效果。万般寻找之下,似乎找到了一个解决方法,但是这个方法必须要每个action都要加上这句代码,很是费事,所以我怀疑这跨域不是问题的根源。但是也找不到其他好的解决方法,只好先慢慢做着。

//设置response对象的标头属性为*,即跨域目标页面允许数据返回给任何页面Access-Control-Allow-Origin: *

  没做多久,问题便又来了,这次是session的问题。当用户登录之后,我想去调用其保存的session中的用户信息,得到的结果居然是null,但是登录action下却可以得到session中的用户信息。于是又去百度,发现出现这个问题的也比较多,但是几乎都没被解决,有说是iframe的问题,还有说浏览器的问题的,不过大部分都认为可能这两个session是不同的。于是我换了谷歌,火狐浏览器去调试,均无效果。最后的最后终于让我找到了问题的根源 ,感谢 http://blog.sina.com.cn/s/blog_ae8c692e0102vrzd.html 这篇博客,喵的居然是这两个似乎是一样的东西害的。

  

 //它们的区别(通过host配置文件来映射)  
127.0.0.1 主机地址(主机服务器) 通过网络访问本地 需要网络权限 localhost 主机服务器      不通过网卡    不需要网络权限 

  访问项目是用的是127.0.0.1,但是返回数据用的地址却是localhost,这就造成了服务器以为这是两个不相同的地址(服务器并不会调用他们的映射文件,浏览器则会),于是就出现访问本机服务器的跨域,会话也会因此而断开,自然取到的session也就不相同了。