前后台分离项目的跨域问题

一般的web项目都是前台页面和后台类放在一个项目文件里,前后台交互不存在跨域问题。

但是对于前后台分离的项目,由于浏览器的同源安全策略,再用平时的方法是请求不到的,这时就要采取一些特殊手段。CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制

 

同源安全策略:浏览器只允许请求当前域的资源,而对其他域的资源表示不信任(只要不是一个端口就不是当前域)

 

方法一:

1、ajax设置支持跨域

    		//使ajax支持跨域
		$.support.cors = true;
		$.ajax({  
			url: 'http://100.24.254.106:8762/cskx/hello1',
			data: {"parameter1":"卡卡"},
			dataType: "text",
			type:"POST",
			success: function (response) {			
				console.log(response);			
			},
			error:function(response){
				console.log(response);
			},
		});	

2、后台类添加响应头

	@ResponseBody
	@RequestMapping("/hello1")
	public String test(HttpServletRequest request, HttpServletResponse response) {
		
		String parameter2 = request.getParameter("parameter1");
		System.out.println(parameter2);
		
		//跨域的响应头
		response.setHeader("Access-Control-Allow-Origin", "*");
		response.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
		response.setHeader("Access-Control-Allow-Headers", "*");
		  
		return "我是服务提供者1号";  

	}

方法二:

针对springboot项目,添加CorsConfig配置:

/*
 * 跨域支持
 */
@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .maxAge(3600);
    }

}

方法三:

通过nginx实现跨域

1、修改nginx的配置文件nginx.conf

server {
        listen       8800;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        
        #支持跨域
        location /cskx {
            add_header 'Access-Control-Allow-Origin' $http_origin;
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' '*';
            proxy_pass http://100.24.254.106:8762/cskx;
        }

}

配置nginx监听8800端口,ajax请求的时候直接请求nginx服务器的8800端口,就会自动转到配置的服务上。

		$.ajax({  
			url: 'http://100.4.254.106:8800/cskx/hello1',
			data: {"parameter1":"卡卡"},
			dataType: "text",
			type:"POST",
			success: function (response) {			
				console.log(response);			
			},
			error:function(response){
				console.log(response);
			},
		});	

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值