最近在在跟前端的哥们写一个小项目,我们采取的是比较暴力的前后端分离开发模式
- 后端只提供 ajax json 格式的数据接口,
- 前端解析数据,渲染
- 相当于 后端和前端分开部署在不同的服务器上
- ajax 跨域,目前后端解决方案:
- res.setHeader("Access-Control-Allow-Origin", "前端站点 ip");
- 这种和 jsoup 都比较常见,主要的疑惑是是否会遇到安全问题
- cookie 跨域
- 场景重现:我后端用的 java,如果在我后端服务器的站点上访问 ,浏览器上的 cookie 能存储到了 jsessionid,session 功能无误,但是如果在前端服务器上的站点,每次在站点部署的前端页面里发送 ajax 请求,后端则会识别不了,每次都认为是一个新的客户端访问,http response header 里都会 set cookie
- 目前的解决方案:主要的疑惑是是否会遇到安全问题
- 后端: 设置响应头 res.setHeader("Access-Control-Allow-Credentials","true");
- 前端处理:
$.ajax({
url: 'url',
xhrFields: {
withCredentials: true
},
crossDomain: true,
success:function(data){
console.log(data)
}
})
})
1
az999 OP 主要是是否有安全隐患,坑都爬了。。怕这种方式出问题。。。
|
2
Phant0m 2016-11-03 22:26:31 +08:00 via iPhone
认证为啥不用 token ?
|
4
xjp 2016-11-03 22:46:14 +08:00 via iPhone 1
这种是最为彻底的前后端分离方式 vue angular 这类的单页面就是这种的
至于跨域问题 把静态页面和后端服务放在多台服务 器上也是非常好的一种方式 不过最好要用 nginx 或者 apache 做转发 防止出现跨域问题 尽量别用 jsonp 与 http 头部来处理跨域 |
5
vghdjgh 2016-11-03 22:53:01 +08:00 1
完全分离后可以通过 nginx 等做成同域的;
cors 配置的地址如果是完全掌控的,那么就是安全的; jsonp 只处理查询时是安全的; cookie 可以通过设置为根域名下来保证子域名都可以不跨域访问; 通过 withCredentials 发送跨域 cookie 的安全性和第 2 条一样; |
6
az999 OP @xjp 感谢你的回复,我是彻底分离,这样前后端开发都特别爽,
nginx 或者 apache 做转发我下去研究下, 如果按照我这种 用 http 头部来处理跨域会有哪些安全问题呢? |
7
az999 OP @vghdjgh 感谢你的回复, nginx 做成同域 还没了解过,明天去试试,
(通过 withCredentials 发送跨域 cookie 的安全性和第 2 条一样;)那其实证明我后端设置 http 头 指定了前端域名, 是没问题的么? |
8
ethanGG 2016-11-04 13:07:37 +08:00
没什么安全问题。
|