首页 > 其他分享 >跨域

跨域

时间:2022-08-31 15:13:59浏览次数:68  
标签:8080 跨域 http config public localhost

跨域

一、什么是跨域?

当一个请求的协议、域名、端口三者之间任意一个与当前页面的URL不同即为跨域

当前页面url 被请求的页面url 是否跨域 原因
http://localhost:8080/ http://localhost:8080/index.html 协议端口号,域名端口号相同
http://localhost:8080/ https://localhost:8080/index.html 协议不同
http://localhost:8080/ http://www.baidu.com/ 域名不同
http://localhost:8080/ http://www.blog.baidu.com/ 域名不同
http://localhost:8080/ http://localhost:9999/ 端口号不同

二、跨域的限制

  1. 无法读取cookie,session
  2. 无法加载非同源DOM
  3. 无法发送AJAX,axios请求

三、java 后端实现CORS跨域请求的方式

对于CORS的跨域请求,主要有以下几种方式可供选择:

  1. 配置返回新的CorsFliter
  2. 配置 WebMvcConfigurer
  3. 使用注解@CrossOrigin
  4. 手动设置响应头(HttpServletResponse)
  5. 自定web fliter 实现跨域

1.返回新的CorsFliter(全局跨域)

注入一个新的配置类

@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1. 添加 CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        //放行哪些原始域
        config.addAllowedOrigin("*");
        //是否发送 Cookie
        config.setAllowCredentials(true);
        //放行哪些请求方式
        config.addAllowedMethod("*");
        //放行哪些原始请求头部信息
        config.addAllowedHeader("*");
        //暴露哪些头部信息
        config.addExposedHeader("*");
        //2. 添加映射路径
        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**",config);
        //3. 返回新的CorsFilter
        return new CorsFilter(corsConfigurationSource);
    }
}

2.重写WebMvcConfigurer(全局跨域)

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                //是否发送Cookie
                .allowCredentials(true)
                //放行哪些原始域
                .allowedOrigins("*")
                .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}

3.使用注解(局部跨域)

对类使用,该类允许跨域

@RestController
@CrossOrigin(origins = "*")
public class HelloController {
    @RequestMapping("/hello")
    public String helloWorld() {
        return "hello world";
    }
}

在方法上使用,表示该方法允许跨域

@RequestMapping("/hello")
    @CrossOrigin(origins = "*")
     //@CrossOrigin(value = "http://localhost:8081") //指定具体ip允许跨域
    public String helloWorld() {
        return "hello world";
    }

4.手动设置响应头(局部跨域)

@RequestMapping("/index")
public String index(HttpServletResponse response) {
    response.addHeader("Access-Allow-Control-Origin","*");
    return "index";
}

还可以根据优化为自定义fliter,集中设置响应头

response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");

标签:8080,跨域,http,config,public,localhost
From: https://www.cnblogs.com/WangJingjun/p/16643159.html

相关文章

  • iframe跨域内嵌帆软web集成页面
    iframe嵌入报表无法加载inaframebecauseitset‘X-Frame-Options‘to‘sameorigin‘项目使用iframe嵌入帆某报表,无法加载,报错inaframebecauseitset‘X-Fram......
  • 跨域问题的解决方案
    1.jsonp的方法    //ajax封装的jsonp,jsonp本质上是通过script标签的src属性解决的跨域问题,只能解决get类型的请求    $.ajax({      url......
  • http跨域 【调试错误】Access to XMLHttpRequest at file:E590/ceshi.json from orig
    【调试错误】AccesstoXMLHttpRequestatfile:E590/ceshi.jsonfromoriginnull亲测有效!!!使用前后端分离的方式创建web项目的时候出现问题:这是因为ajax请求的对应......
  • 前端解决跨域问题的方法:jsonp
    同源策略同源策略/SOP(Sameoriginpolicy)是一种约定,是浏览器最核心也最基本的安全功能,现在所有支持JavaScript的浏览器都会使用这个策略。如果缺少了同源策略,浏览器很容......
  • has been blocked by CORS policy跨域问题解决
    title:hasbeenblockedbyCORSpolicy跨域问题解决我们在前端调用接口时,浏览器有时候会报错:XXXXformXXXXXhasbeenblockedbyCORSpolicy:No'Access-Control-......
  • django中发送post请求,报错csrf跨域问题,解决的办法?
    方法一:在setting.py文件中找到MIDDLEWARE字段,然后注释掉带有csrf的那一行。方法二:在发送请求的html文件的form表单中添加一行{%csrf_token%},即可解决。......
  • springboot2.4.x websocket跨域问题
    1,springboot升级版本以后websocket连接出现以下错误java.lang.IllegalArgumentException:WhenallowCredentialsistrue,allowedOriginscannotcontainthespecialv......
  • php优化 - 防止跨域攻击
    php优化-防止跨域攻击解决方案:验证HTTPReferer字段服务端生成token,下发到客户端,客户端提交后并进行验证http的header头自定义属性,每次验证header头中的自定......
  • 一次跨域请求出现 OPTIONS 请求的问题及解决方法
    浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都属于跨域。前端这边有一个get请求,在请求的header里面要添加两个自定义的header。GEThttp:......
  • 解决Java前后端跨域问题
    在后端解决在springboot项目的包目录下创建一个config包在包里新建一个CorsConfig类:packagecom.liu.springboot.config;importorg.springframework.context.annotat......