weixin_39806679
weixin_39806679
2021-01-07 07:30

前后端分离,Ajax跨域问题如何解决???

我们团队现在遇到一个小问题,就是 Ajax跨域的问题,我们的开发场景 是这个样子滴: - 我们只负责前端交互逻辑,数据CURD全部由接口负责,但是涉及到跨域; - 其次我们开发的前端代码暂时还无法部署到他们的WEB服务器上,若能布置上,应该不涉及跨域问题; - 最关键的是,CORS服务器端的跨域和JSONP跨域,接口全部不支持;

我们目前的解决方案: - 使用PHP做了一层后台代理,我们前端的代码放到了PHP的Apache服务器上,真实的数据接口全部用PHP重新封装了一遍。

请问大神们,对于这种开发情景,Ajax跨域开发的最佳实践是什么?

该提问来源于开源项目:fex-team/fis3

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

13条回答

  • weixin_39806679 weixin_39806679 4月前

    太感谢了,我回头研究研究,还有一个问题,比如关于负载改如何解决,因为我们是做前端的,页面都是用Smarty模板写的,最近Apache被压得分发不过来了,如果我使用nginx,有好的负载方案供参考吗?目前我们的数据接口运行环境是tomcat,我们的页面跑在Apache上,现在解决负载好头疼

    点赞 评论 复制链接分享
  • weixin_39536728 weixin_39536728 4月前

    nginx的优势 1. 静态服务器 2. 反向代理 3. 负载均衡

    所以可以关注一下

    点赞 评论 复制链接分享
  • weixin_39806679 weixin_39806679 4月前

    好的,我好好研究下,太感谢了!

    点赞 评论 复制链接分享
  • weixin_39806679 weixin_39806679 4月前

    非常感谢您推荐nginx,我这几天一直在研究,现在已经可以满足我 跨域开发的问题了,但是 还有一个问题,我上网找了好多资源都没找到,就是如何隐藏我敏感的参数的问题?我详细的叙述一下: - 我们用PHP做代理,有两个目的: - 一是为了跨域; - 第二个是为了隐藏敏感信息。

    比如在浏览器直接发送请求,包含参数为a=1,抓包工具也只能看到a这个参数,但是实际上我们已经用PHP把公共的敏感的参数,比如授权的参数包含的PHP脚本中进行处理了,这个请求PHP转换后会变成很长的一个带有很多参数的真实的请求发给接口,从而避免了暴露敏感参数。

    请问nginx如何做到PHP的这项功能呢?其实有很多参数都是写死的,只要nginx每次转发都带上这个参数就好了,但是我查了很多资料,都不知道该怎么配置,求大神指导!

    点赞 评论 复制链接分享
  • weixin_39536728 weixin_39536728 4月前

    -goodboy 或许这个可以有帮助 http://stackoverflow.com/questions/16532293/nginx-proxy-pass-is-it-possible-to-add-a-static-parameter-to-the-url

    点赞 评论 复制链接分享
  • weixin_39806679 weixin_39806679 4月前

    大神啊,你太强了,👍👍👍

    点赞 评论 复制链接分享
  • weixin_39806679 weixin_39806679 4月前

    大神,现在又遇到一个问题,就是 我要是用 nginx 做转发,那么 session 怎么控制?我查了资料有四种可以控制session的方法,其中两个是官方的,另外两个是第三方的,但是都有好多的限制,比如ip_hash的方法,nginx前后不允许有其他的代理,请问大神是如何解决session的问题的?

    点赞 评论 复制链接分享
  • weixin_39646628 weixin_39646628 4月前

    https://github.com/a526672351/egg-fis3-typescript-multiple-html-boilerplate

    点赞 评论 复制链接分享
  • weixin_39536728 weixin_39536728 4月前

    像这样的情况, 最简单的就是用 nginx/apache 做一层转发呀. 根本不需要用 php 吧

    比如约定, 所有 /service 开头的请求, 全部转发到接口服务器上

    点赞 评论 复制链接分享
  • weixin_39620065 weixin_39620065 4月前

    后端不提供跨域支持的情况下, 那就只有 proxy 的方案了, 具体用 nginx / node 就看你们的技术栈了. 我们这边是有自己的 node 服务

    点赞 评论 复制链接分享
  • weixin_39806679 weixin_39806679 4月前

    怎么弄?你的意思是用nginx/apache来做代理(转发),是这个意思吗?我们现在是用PHP把接口封装成了PHP的函数,然后 我们前端调用,你的意思是去掉PHP,直接用nginx,是吗?能给了demo或者相关文章的链接吗?我只用过tomcat,没接触过nginx,非常感谢!

    点赞 评论 复制链接分享
  • weixin_39806679 weixin_39806679 4月前

    node 如何做?是用node调用 接口吗?然后提供给前端调用 node封装好的函数?我们现在使用PHP这么做的,您能告诉我,您那边是怎么做的吗?非常感谢!

    点赞 评论 复制链接分享
  • weixin_39536728 weixin_39536728 4月前

    是的, 就是直接去掉 php, 只使用nginx转发

    比如这样的, proxy_pass 就是做这个的

     nginx
    server{
      server_name example.com;
      location /service/ {
            proxy_set_header    X-Real-IP       $remote_addr;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Protocol $scheme;
            proxy_set_header    X-Forwarded-Port $server_port;
            proxy_pass http://api-server.com/;
        }
    }
    
    点赞 评论 复制链接分享

相关推荐