浏览器请求前端服务器的静态资源,HTML、CSS之类的,
然后浏览器再进行ajax请求api服务器,产生了跨域问题。
我目前想的方案,
一是把前后端资源都置于同一域名下,但是感觉不是太合理。
二是使用反向代理,但是没弄过不清楚是不是合适。
请问如何通过后端解决此问题呢?
浏览器请求前端服务器的静态资源,HTML、CSS之类的,
然后浏览器再进行ajax请求api服务器,产生了跨域问题。
我目前想的方案,
一是把前后端资源都置于同一域名下,但是感觉不是太合理。
二是使用反向代理,但是没弄过不清楚是不是合适。
请问如何通过后端解决此问题呢?
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 {
}
}
题主后端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');
8 回答6.5k 阅读
2 回答4.3k 阅读✓ 已解决
2 回答853 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
4 回答688 阅读✓ 已解决
3 回答843 阅读✓ 已解决
跨域基本上有以下几种解决方案
JSONP
CORS
window.name
document.domain
5.location.hash
6.window.postMessage()
具体可参考以下文章https://github.com/rccoder/bl...