一些 web 前后端分离的坑与疑惑,希望能有经验的高手解答下。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
az999

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

  •  1
     
  •   az999 Nov 3, 2016 5162 views
    This topic created in 3464 days ago, the information mentioned may be changed or developed.

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

    • 后端只提供 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) } }) }) 
    8 replies    2016-11-04 13:07:37 +08:00
    az999
        1
    az999  
    OP
       Nov 3, 2016
    主要是是否有安全隐患,坑都爬了。。怕这种方式出问题。。。
    Phant0m
        2
    Phant0m  
       Nov 3, 2016 via iPhone
    认证为啥不用 token ?
    az999
        3
    az999  
    OP
       Nov 3, 2016
    @Phant0m 嗯, token 这种方案可行,但想看看这种方案是否也可行。。
    xjp
        4
    xjp  
       Nov 3, 2016 via iPhone   1
    这种是最为彻底的前后端分离方式 vue angular 这类的单页面就是这种的

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

    不过最好要用 nginx 或者 apache 做转发 防止出现跨域问题 尽量别用 jsonp 与 http 头部来处理跨域
    vghdjgh
        5
    vghdjgh  
       Nov 3, 2016   1
    完全分离后可以通过 nginx 等做成同域的;
    cors 配置的地址如果是完全掌控的,那么就是安全的;
    jsonp 只处理查询时是安全的;
    cookie 可以通过设置为根域名下来保证子域名都可以不跨域访问;
    通过 withCredentials 发送跨域 cookie 的安全性和第 2 条一样;
    az999
        6
    az999  
    OP
       Nov 3, 2016
    @xjp 感谢你的回复,我是彻底分离,这样前后端开发都特别爽,
    nginx 或者 apache 做转发我下去研究下, 如果按照我这种 用 http 头部来处理跨域会有哪些安全问题呢?
    az999
        7
    az999  
    OP
       Nov 3, 2016
    @vghdjgh 感谢你的回复, nginx 做成同域 还没了解过,明天去试试,
    (通过 withCredentials 发送跨域 cookie 的安全性和第 2 条一样;)那其实证明我后端设置 http 头 指定了前端域名, 是没问题的么?
    ethanGG
        8
    ethanGG  
       Nov 4, 2016
    没什么安全问题。
    About     Help     Advertise     Blog     API     FAQ     Solana     926 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 20:46 PVG 04:46 LAX 13:46 JFK 16:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86