跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。
通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。详细理论可以参考前端常见跨域解决方案这篇文章。
后端转发解决跨域开发过程中经常能碰到这种场景,前端页面访问的是外部资源(跟前端应用部署的不是一台机器或者不是一个IP),此时常见的做法是通过 nginx 进行代理转发解决跨域。
代理转发要求被代理服务的域名(IP)固定,且具有统一前缀(最好),否则不但配置繁琐,还可能请求失败。
如果某个后端服务的请求路径不固定,则可以通过后端服务进行转发,这里以Java为例。
@GetMapping("/cros")
public void testCros(HttpServletResponse response) throws IOException {
String url = "http://www.baidu.com";
HttpGet httpGet = new HttpGet(url);
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse execute = httpClient.execute(httpGet);
// 此处也可以设置一下响应头
execute.getEntity().writeTo(response.getOutputStream());
}
此时 请求咱们接口,前端调咱们后端的接口就可以访问想代理的链接了。
参考前端常见跨域解决方案HttpClient 4.5 中转请求到HttpServletResponse



