php - api服务器与前端服务器之间如何解决跨域问题?
PHP中文网
PHP中文网 2017-04-11 09:57:09
[PHP讨论组]

浏览器请求前端服务器的静态资源,HTML、CSS之类的,
然后浏览器再进行ajax请求api服务器,产生了跨域问题。

我目前想的方案,
一是把前后端资源都置于同一域名下,但是感觉不是太合理。
二是使用反向代理,但是没弄过不清楚是不是合适。

请问如何通过后端解决此问题呢?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(13)
迷茫

跨域基本上有以下几种解决方案

  1. JSONP

  2. CORS

  3. window.name

  4. document.domain

  5. 5.location.hash

  6. 6.window.postMessage()

具体可参考以下文章https://github.com/rccoder/bl...

伊谢尔伦

api服务器设置跨域头即可,如果你是spring写的,可以用类似如下的代码

@Component
public class CorsFilter implements Filter {
    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
        throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;

        response.setHeader("Access-Control-Allow-Origin", "你的前端服务器地址");
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE, HEAD, PATCH");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, X-Auth-Token, Content-Type");
        response.setHeader("Access-Control-Expose-Headers", "X-Requested-With, X-Auth-Token, Content-Type, X-TOTAL-COUNT");
        response.setHeader("Access-Control-Allow-Credentials", "true");

        if (!"OPTIONS".equalsIgnoreCase(request.getMethod())) {
            chain.doFilter(req, res);
        }
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
    }
}
PHP中文网

举例,有两个项目:P 以及 API

那么调用方式类似:P前端 -》P后端 -》API

ringa_lee

题主后端Nodejs的,可以采用一下代码实现跨域,如果是express,建议包装成middleware

res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
res.setHeader('Access-Control-Allow-Credentials', true);
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers','x-requested-with,content-type');
阿神

最佳答案已经有了,别忘了请求的时候 withCredentials: true 以带上 cookie

大家讲道理

jsonp 可以参考下

PHP中文网

Access-Control-Allow-Origin:前端域名

怪我咯

个人觉得还是利用反向代理最靠谱

大家讲道理

可能使用nginx进行反向代理比较方便,设置跨域响应头并不能全部兼容IE

巴扎黑

反向代理比较简单

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号