跨域、跨域问题 朴灿烈づ我的快乐病毒、 2023-09-27 00:59 194阅读 0赞 跨域(CORS)是一种允许当前域(domain)的资源(比如html/js/web service)被其他域(domain)的脚本请求访问的机制,通常由于同域安全策略(the same-origin security policy)浏览器会禁止这种跨域请求。 跨域问题(CORS PROBLEM)是浏览器同源策略导致访问失败的问题。 **跨域产生的场景\[同协议 同IP 同端口\]** 1)不同协议(http/https) 2)不同IP 3)不同端口 **前端解决方案** 1)jsonp 2)nodeJs服务器代理 **后端解决方案** 1)nginx反向代理解决跨域 2)服务端设置Response Header(响应头部)的Access-Control-Allow-Origin 3)在需要跨域访问的类和方法中设置允许跨域访问(如Spring中使用@CrossOrigin注解); 4)继承使用Spring Web的CorsFilter(适用于Spring MVC、Spring Boot) 5)实现WebMvcConfigurer接口(适用于Spring Boot) **具体实现** 1)实现 Filter 过滤器方式 @WebFilter public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "*"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "*"); response.setHeader("Access-Control-Allow-Credentials", "true"); chain.doFilter(req, res); } } 2)继承 HandlerInterceptorAdapter 拦截器方式 @Component public class CrossInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "*"); response.setHeader("Access-Control-Allow-Credentials", "true"); return true; } } 3)实现 WebMvcConfigurer 方式 @Configuration @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") public class CrosConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 拦截所有的请求 .allowedOrigins("http://www.xxx.com") // 可跨域的域名,可以为 * .allowCredentials(true) .allowedMethods("*") // 允许跨域的方法,可以单独配置 .allowedHeaders("*"); // 允许跨域的请求头,可以单独配置 } } 4)使用Nginx配置 location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS; if ($request_method = 'OPTIONS') { return 204; } } 5)使用 @CrossOrgin 注解 @CrossOrigin //在Controller使用 @RestController @RequestMapping("/test") public class TestController { @GetMapping("/test1") public String test1() { return "test1"; } @CrossOrigin // 在具体接口上使用 @GetMapping("/test2") public String test2() { return "test2"; } } 6)Spring Cloud Gateway 跨域配置 spring: cloud: gateway: globalcors: cors-configurations: '[/**]': allow-credentials: true allowed-origins: - "http://xb.abc.com" - "http://sf.xx.com" allowed-headers: "*" allowed-methods: - OPTIONS - GET - POST - DELETE - PUT - PATCH max-age: 3600
相关 【跨域】如何解决跨域问题 同源策略 同源 相同协议+相同域名+相同端口 内容 [浏览器的同源策略 - Web 安全 | MDN (mozilla.org)][- Web _ _ 超、凢脫俗/ 2024年03月16日 13:32/ 0 赞/ 124 阅读
相关 跨域、跨域问题 跨域(CORS)是一种允许当前域(domain)的资源(比如html/js/web service)被其他域(domain)的脚本请求访问的机制,通常由于同域安全策略(the 朴灿烈づ我的快乐病毒、/ 2023年09月27日 00:59/ 0 赞/ 195 阅读
相关 跨域问题 跨域问题 跨域 请求协议不一致导致 IP地址的不一致导致 端口不一致导致 跨域 跨域问题普遍存在前后端分离得开发模式 我会带着你远行/ 2022年12月20日 01:57/ 0 赞/ 215 阅读
相关 跨域问题解决方案(HttpClient安全跨域 & jsonp跨域) 1 错误场景 今天要把项目部署到外网的时候,出现了这样的问题, 我把两个项目放 女爷i/ 2022年06月06日 09:52/ 0 赞/ 413 阅读
相关 跨域问题 要解决跨域问题先来看看什么是同源策略。 同源策略 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。 下表给出了相对`http://s 川长思鸟来/ 2022年03月12日 06:27/ 0 赞/ 313 阅读
相关 跨域问题 确实,我们这种搬砖工人就是为了混口饭吃嘛,好好的调个接口告诉我跨域了,这种阻碍我们轻松搬砖的事情真恶心!为什么会跨域?是谁在搞事情?为了找到这个问题的始作俑者,请 ゝ一世哀愁。/ 2022年01月14日 13:01/ 0 赞/ 353 阅读
相关 跨域问题 跨域是个老生常谈的跨题。今天在我们后端的帮助和配合下,对跨域又多了一层认识。感觉对于每件事,只要是从3个方面(what,why,how)去理解,都会对其有个基本(70 r囧r小猫/ 2022年01月06日 13:43/ 0 赞/ 326 阅读
相关 跨域问题 1、浏览器的同源安全策略 没错,就是这家伙干的,浏览器只允许请求当前域的资源,而对其他域的资源表示不信任。那怎么才算跨域呢? 1. 请求协议`http,https`的 约定不等于承诺〃/ 2021年09月28日 14:54/ 0 赞/ 439 阅读
相关 跨域问题 一.http (一).http请求的推演过程 1. url(www.baidu.com) =>进行DNS域名解析 => 得到 ip (192.1 一时失言乱红尘/ 2021年09月03日 08:04/ 0 赞/ 695 阅读
相关 跨域问题 使用vue访问springboot java后台api时候,出现错误: 已拦截跨源请求:同源策略禁止读取位于 https://xxxxi/xxx/xx/xxxi/ad 痛定思痛。/ 2021年09月01日 04:42/ 0 赞/ 521 阅读
还没有评论,来说两句吧...