logo资料库

解决 springboot跨域请求问题.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
springboot 做前后端分离,ajax 跨域请求问题 ajax 跨域条件:只要协议、域名、端口有任何一个不同,都被当作是不同的域 前后端分离:即将后端服务层与前端展示层分别开发和部署,因而产生两个需要打包 发布的项目, 将两个分别部署后,前端再去请求后端就会产生跨域请求的问题。 两种解决方案, 解决方案一,使用跨域方案 步骤: 服务端,springboot 配置中,增加配置跨域配置代码: package com.zx.zweb.conf; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; @Configuration public class CorsConfig { private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); // 1 允许任何域名使用 corsConfiguration.addAllowedHeader("*"); // 2 允许任何头
corsConfiguration.addAllowedMethod("*"); // 3 允许任何方法(post、get 等) return corsConfiguration; } @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", buildConfig()); // 4 return new CorsFilter(source); } } 客户端请求,不用做任何修改,仍然如下 $.ajax({ type : "POST" , url : "http://127.0.0.1:9080/sysUserAccount/search" , contentType : "application/json", dataType : "JSON", data : JSON.stringify(sysUserAccount), success : function(data) { alert("ok") }, error : function(data) { alert("err") } });
解决方案二,采用 server+nginx,原理是用 nginx 代理分别代理两个 server,让这 2 个 server 处于统一服务下, 这样就可以实现本地访问了 步骤: 在 nginx 中增加代码,代理后端项目 location / { proxy_pass http://127.0.0.1:9080; index index.html index.htm; #Proxy Settings IP # 后端的 Web 服务器可以通过 X-Forwarded-For 获取用户真实 off; proxy_redirect proxy_set_header Host proxy_set_header X-Real-IP proxy_set_header X-Forwarded-For $host; $remote_addr; $proxy_add_x_forwarded_for; http_502 http_503 http_504; proxy_next_upstream error timeout invalid_header http_500 proxy_max_temp_file_size 0; proxy_connect_timeout 90; # nginx 跟后端服 务器连接超时时间(代理连接超时)
proxy_send_timeout 90; # 连接成功后,后 端服务器发送时间(代理接收超时) proxy_read_timeout 90; # 连接成功后,后 端服务器响应时间(代理接收超时) proxy_buffer_size 4k; # 设置代理服务器(nginx) 保存用户头信息的缓冲区大小 proxy_buffers 网页平均在 32k 以下的话,这样设置 4 32k; # proxy_buffers 缓冲区, proxy_busy_buffers_size 64k; # 高负荷下缓冲大 小(proxy_buffers*2) proxy_temp_file_write_size 64k; # 设定缓存文件夹 大小,大于这个值,将从 upstream 服务器传 } } 代理前端 html 项目 location /zweb { add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; root D:/zweb; #显示的根索引目录 } 在 ajax 中,去掉端口,使用 nginx 代理的请求地址 $.ajax({ type : "POST" ,
url : "http://127.0.0.1/sysUserAccount/search" , contentType : "application/json", dataType : "JSON", data : JSON.stringify(sysUserAccount), success : function(data) { alert("ok") }, error : function(data) { alert("err") } }); 总结 一:实现跨域请求; 优点:简单,不用做任何修改,请求远程与本地没任何区别 缺点:带来技术问题跨域 cookies 共享 二:server+nginx 代理 优点:略 确定:稍微复杂一下
分享到:
收藏