一些 web 前后端分离的坑与疑惑,希望能有经验的高手解答下。

2016-11-03 21:41:51 +08:00
 az999

最近在在跟前端的哥们写一个小项目,我们采取的是比较暴力的前后端分离开发模式

  • 后端只提供 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)

        }

    })

})
4588 次点击
所在节点    问与答
8 条回复
az999
2016-11-03 21:54:33 +08:00
主要是是否有安全隐患,坑都爬了。。怕这种方式出问题。。。
Phant0m
2016-11-03 22:26:31 +08:00
认证为啥不用 token ?
az999
2016-11-03 22:37:30 +08:00
@Phant0m 嗯, token 这种方案可行,但想看看这种方案是否也可行。。
xjp
2016-11-03 22:46:14 +08:00
这种是最为彻底的前后端分离方式 vue angular 这类的单页面就是这种的

至于跨域问题 把静态页面和后端服务放在多台服务 器上也是非常好的一种方式

不过最好要用 nginx 或者 apache 做转发 防止出现跨域问题 尽量别用 jsonp 与 http 头部来处理跨域
vghdjgh
2016-11-03 22:53:01 +08:00
完全分离后可以通过 nginx 等做成同域的;
cors 配置的地址如果是完全掌控的,那么就是安全的;
jsonp 只处理查询时是安全的;
cookie 可以通过设置为根域名下来保证子域名都可以不跨域访问;
通过 withCredentials 发送跨域 cookie 的安全性和第 2 条一样;
az999
2016-11-03 23:08:14 +08:00
@xjp 感谢你的回复,我是彻底分离,这样前后端开发都特别爽,
nginx 或者 apache 做转发我下去研究下, 如果按照我这种 用 http 头部来处理跨域会有哪些安全问题呢?
az999
2016-11-03 23:10:24 +08:00
@vghdjgh 感谢你的回复, nginx 做成同域 还没了解过,明天去试试,
(通过 withCredentials 发送跨域 cookie 的安全性和第 2 条一样;)那其实证明我后端设置 http 头 指定了前端域名, 是没问题的么?
ethanGG
2016-11-04 13:07:37 +08:00
没什么安全问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/317862

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX