3.1 CORS
3.2 对服务进行封装转发 (比如httpclient)代理或DNS配置 , 从不同源转为同源 1. 浏览器客户端解决方案
禁止跨域访问, 是浏览器的安全策略,所以修改浏览器的安全设置就可以允许跨域访问了。
修改方式是在浏览器的启动参数加上 --disable-web-security
。
Windows 下的修改方式是先找到浏览器的桌面快捷方式, 单击右键,选择属性,在d出对话框的 “目标”一栏增加上面的参数, 如下图:
注意, 如果是新版的Chrome(比如版本 101.0.4951.64(正式版本) (64 位)), 则需要先在建立一个目录, 比如 C:\MyChromeUserData
。启动参数如下:
--disable-web-security --user-data-dir=C:\MyChromeUserData
启动Chrome 之后会有一个安全提示:
这种方式需要在每个客户端设置, 安全性不好,不推荐。可以临时使用或测试。
2. 前端代码解决方案前端代码也就是JavaScriptd代码解决跨域的方案就是JSONP,虽然浏览器有同源策略的限制,但是对于 script 、link 、img以及iframe 的标签是例外的, 利用这个特性或者是漏洞可以实现跨域访问。
但是注意: 这种方式只支持GET请求方法。
一些前端库或框架也提供了 JSONP的简便调用方法,比如JQuery 和Ext JS。
关于JSONP的原理以及解决方案详情可以参考:
CORS ,Cross-Origin Resource Sharing,跨域资源共享。
CORS通过添加HTTP请求的响应头参数,告知浏览器哪些不符合同源策略的状况也可以跨域访问。
这些响应头参数主要包括:
以JSP为例, 最简单的请求头设置代码如下:
response.setHeader("Access-Control-Allow-Origin", "*");
上面的代码是设置所有来源的站点都可以访问。在Spring Boot项目中, Spring Boot提供了更多样化、简洁和灵活的配置方式, 详细参考:
Spring Boot 跨域访问的实现方式最全汇总
将原服务地址使用httpclient进行包装, 转换为应用内部的地址, 进而将跨域的服务地址转换为本地应用的服务地址。
关于HttpClient 的使用可以参考:
HttpClient 入门与正确使用姿势
如果是访问https 的站点, 则需要使用证书或是忽略证书进行访问, 参考:
HttpClient 忽略证书直接访问https站点HttpClient 使用证书访问https站点 4. 代理或DNS配置 , 从不同源转为同源如果不想或没有办法改动代码,也可以使用代理或是DNS的方式对服务的地址进行转换, 方式有:
代理, 接口网关DNS 配置。 将某个服务的地址进行DNS映射。比如某个服务的IP 地址是 http://172.0.0.1/service1 , 配置DNS之后将这个地址映射为与访问机器同域的地址。该方式一般使用较少。 代理实现跨域将资源服务,包括JS , CSS , 接口服务搭建一个中间层, 所偶的浏览器及客户端访问都通过代理转发, 这样的话, 在浏览器端来看,访问的都是同一个地址的资源。
Ngnix 是常用的反向代理服务器, 基本使用可以参考 :
Windows下nginx的快速安装和使用
Ngnix 一般用于企业级的API接口网关, Zuul则可以用来搭建微服务API接口网关。Spring Boot提供了与Zuul的集成, 此外,在Spring Boot中, 也可以自定义更轻量级的代理转发器。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)