1.什么是跨域
当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.google.com),那么我们就可以认为它们是相同的域(协议,域名,端口都必须相同)。
跨域就指着协议,域名,端口不一致,出于安全考虑,跨域的资源之间是无法交互的(例如一般情况跨域的JavaScript无法交互,当然有很多解决跨域的方案)
(浏览器的同源安全策略
没错,就是这家伙干的,浏览器只允许请求当前域的资源,而对其他域的资源表示不信任。那怎么才算跨域呢?
请求协议http,https的不同
域domain的不同
端口port的不同)
2.实现跨域访问的方式
1) JSONP :
动态添加一个
2) NGINX代理 :
通过一个代理服务器,将跨域的请求转发,如:前端JS在http://www.demo.com/a.js,后端是http://www.abc.com/app/action,通过代理可将后端的地址转换成http://www.demo/app/action,这样,从前端发起的请求,就不存在跨域的情况了
3)CORS
然后CORS是支持所有类型的HTTP请求,并且也只是服务端进行设置即可,但是缺点就是老的浏览器不支持CORS(如:IE7,7,8,等)
https://www.jianshu.com/p/89a377c52b48
3.具体实现
前台:
1.jsonp请求
function btn(){
$.ajax({
url:"http://127.0.0.1:8088/findBook",
type:"GET",
dataType:"jsonp",
success:function(data){
console.log(data);
alert(data.name);
}
})
}
2.jsonp原理:
cors实现
1.注解
@CrossOrigin(methods = { RequestMethod.GET, RequestMethod.POST }, origins = “*”)
2.结合Filter
在启动类上加如下代码:
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final org.springframework.web.cors.CorsConfiguration config = new org.springframework.web.cors.CorsConfiguration();
config.setAllowCredentials(true); // 允许cookies跨域
config.addAllowedOrigin("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin
config.addAllowedHeader("*");// #允许访问的头信息,*表示全部
config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
config.addAllowedMethod("OPTIONS");// 允许提交请求的方法,*表示全部允许
config.addAllowedMethod("HEAD");
config.addAllowedMethod("GET");// 允许Get的请求方法
config.addAllowedMethod("PUT");
config.addAllowedMethod("POST");
config.addAllowedMethod("DELETE");
config.addAllowedMethod("PATCH");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
使用Nginx实现负载均衡
1使用多个tomcat
2每个tomcat部署相同的项目
3.使用nginx反向代理tomcat
将项目模块打成war包
以下代码粘pom文件
war
org.springframework.boot
spring-boot-starter-tomcat
provided
.
这里设置打成的war包的名称
org.springframework.boot
spring-boot-maven-plugin
2.修改微服务启动类,继承SpringBootServletInitializer重写configure方法
@SpringBootApplication
@EnableEurekaServer
public class EurekaDemoApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(EurekaDemoApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(EurekaDemoApplication.class);
}
}
先clean一下 再packge打包 将打好的war包放到Tomcat的 wabapp目录下 启动tomcat
listen:表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。
server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地,这时是直接到nginx文件夹内。
location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
root:里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件。
index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。