springboot 解决跨域

一、什么是跨域HTTP请求

现代浏览器出于安全的考虑,使用 XMLHttpRequest对象发起 HTTP请求时必须遵守同源策略,否则就是跨域的HTTP请求,默认情况下是被禁止的。

跨域HTTP请求是指A域上资源请求了B域上的资源,举例而言,部署在A机器上Nginx上的js代码通过ajax请求了部署在B机器Tomcat上的RESTful接口。

IP(域名)不同、或者端口不同,都会造成跨域问题。为了解决跨域的问题,曾经出现过jsonp、代理文件等方案,应用场景受限,维护成本高,直到HTML5带来了CORS协议。

CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

它通过服务器增加一个特殊的Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持CORS、并且判断Origin通过的话,就会允许XMLHttpRequest发起跨域请求。

CROS常见header

Access-Control-Allow-Origin:http://locahost:8080表示允许http://locahost:777。
Access-Control-Max-Age:86400 表示在86400秒内不需要再发送预校验请求。
Access-Control-Allow-Methods: GET,POST,PUT,DELETE 表示允许跨域请求的方法。
Access-Control-Allow-Headers: content-type 表示允许跨域请求包含content-type

二、CORS实现跨域访问

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * 服务端解决跨域问题
 * @author 
 *
 */
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    
    
    static final String ORIGINS[] = new String[] { "GET", "POST", "PUT", "DELETE" };        
    /**
     * 对test的get请求进行跨域
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/test").allowedOrigins("*").allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600);
    }
}

前端Vue代码

 reqCors(){
        let  param = {name:"admin"}      
            this.$http.get("http://localhost:777/test",{
            params:param
          }).then(res => {
           console.log(res);
          });
 }

网上解决跨域问题很多,请自行参考。

 

posted @ 2020-04-07 10:25  小小的白鹤  阅读(257)  评论(0)    收藏  举报