V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
az999
V2EX  ›  问与答

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

  •  1
     
  •   az999 · 2016-11-03 21:41:51 +08:00 · 4569 次点击
    这是一个创建于 2948 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    不过最好要用 nginx 或者 apache 做转发 防止出现跨域问题 尽量别用 jsonp 与 http 头部来处理跨域
    vghdjgh
        5
    vghdjgh  
       2016-11-03 22:53:01 +08:00   ❤️ 1
    完全分离后可以通过 nginx 等做成同域的;
    cors 配置的地址如果是完全掌控的,那么就是安全的;
    jsonp 只处理查询时是安全的;
    cookie 可以通过设置为根域名下来保证子域名都可以不跨域访问;
    通过 withCredentials 发送跨域 cookie 的安全性和第 2 条一样;
    az999
        6
    az999  
    OP
       2016-11-03 23:08:14 +08:00
    @xjp 感谢你的回复,我是彻底分离,这样前后端开发都特别爽,
    nginx 或者 apache 做转发我下去研究下, 如果按照我这种 用 http 头部来处理跨域会有哪些安全问题呢?
    az999
        7
    az999  
    OP
       2016-11-03 23:10:24 +08:00
    @vghdjgh 感谢你的回复, nginx 做成同域 还没了解过,明天去试试,
    (通过 withCredentials 发送跨域 cookie 的安全性和第 2 条一样;)那其实证明我后端设置 http 头 指定了前端域名, 是没问题的么?
    ethanGG
        8
    ethanGG  
       2016-11-04 13:07:37 +08:00
    没什么安全问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2160 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:24 · PVG 08:24 · LAX 16:24 · JFK 19:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.