ajax跨域请求带上cookie为什么不能用IP?

前端同事访问自己本地的应用 指定了hosts 如

127.0.0.1 my.foo.com

然后访问 my.foo.com 但是在页面上通过ajax调用后端的接口 如调用我机器上的接口

$.ajax({
    type: "post",
    url: 'http://192.169.0.204:8080/bar/search',
    contentType : "application/json;charset=utf-8",
    dataType: "json",
    ...

因为服务端需要获取cookie信息 而这又是跨域调用 默认不带cookie 需要显式设置

client端必须手动设置xhr.withCredentials=true
server端也必须允许request能携带认证信息(即response header中包含Access-Control-Allow-Credentials:true)
server端一定不能将Access-Control-Allow-Origin设置为*,而必须设置为请求页面的域名。
参考: https://segmentfault.com/a/11...

前端和服务端都按上述要求设置了 但是服务端还是接收不到cookie 最后前端同事将我的IP地址也改成hosts 才终于成功了

127.0.0.1 my.foo.com
192.168.0.204 back.foo.com

ajax请求中的地址改成

url: 'http://back.foo.com:8080/bar/search'

我有点不解 都按要求配置了 为什么非得使用hosts呢?用IP为什么就不行呢?

阅读 8.1k
2 个回答

因为跨域的域指的和页面的域不同,如果页面使用IP,ajax也使用相同的IP,就不会跨域了

因为cookie的作用仅在当前域名下,跨域就不能用了。。要不然baidu.com设置的cookie,别的域名或ip还能用还能继续用,那不是乱了套了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏