一、开发环境
为洛阳等地区用户提供了全套网页设计制作服务,及洛阳网站建设行业解决方案。主营业务为成都网站建设、成都网站设计、洛阳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
二、跨域问题
本地使用ajax访问localhost:8080端口时报错:
Failed to load http://localhost:8080/test/test.do: No ‘Access-Control-Allow-Origin' header is present on the requested resource. Origin ‘null' is therefore not allowed access.
React与Springboot前后端分离,React端口为3000而Springboot端口为8080,跨端口访问用寻常的ajax是无法跨域访问的。
什么是跨域?
当客户端向服务器发起一个网络请求,url会有包含三个主要信息:协议(protocol),域名(host),端口号(port)。当三部分都和服务器相同的情况下,属于同源。但是只要有一个不同,就属于构成了跨域调用。会受到同源策略的限制。
同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。浏览器的同源策略,出于防范跨站脚本的攻击,禁止客户端脚本(如 JavaScript)对不同域的服务进行跨站调用(通常指使用XMLHttpRequest请求)。
三、解决方法
(1)java后端过滤器实现cros:
在后端配置过滤器CrosFilter
public class CorsFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");//设置允许跨域的域名,需要发送cookie信息,所以此处需要指定具体的域名, httpResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); httpResponse.setHeader("Access-Control-Allow-Methods", "GET, PUT, DELETE, POST");//允许跨域的请求方式 /** * ajax请求的时候如果带有xhrFields:{withCredentials:true}, * 那么服务器后台在配置跨域的时候就必须要把Access-Control-Allow-Credentials这个请求头加上去 */ httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//允许发送Cookie信息 httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 支持HTTP 1.1. httpResponse.setHeader("Pragma", "no-cache"); // 支持HTTP 1.0. response.setHeader("Expires", "0"); chain.doFilter(request, response); } public void destroy() { // TODO Auto-generated method stub } }
参考:跨域资源共享 CORS 详解——阮一峰
(2)使用代理服务器跨域访问:
在dev.js中配置
devServer: { port: '3000',//开发端口 host: '127.0.0.1',//主机地址 historyApiFallback: false, disableHostCheck: true, noInfo: false, stats: 'minimal', inline: true, //开启服务器的模块热替换(HMR) hot: true, // 和上文 output 的“publicPath”值保持一致 publicPath: context, proxy: { '/mytest/*': { target: "http://localhost:8080",//对应后端端口 secure: false, changeOrigin: true }//如果Controller的Requestmapping有多个这里也要对应多个 ,'/test/*': { target: "http://localhost:8080", secure: false, changeOrigin: true } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。
网页标题:详解Springboot+React项目跨域访问问题
网站URL:https://www.cdcxhl.com/article10/gpphdo.html
成都网站建设公司_创新互联,为您提供移动网站建设、、微信小程序、网页设计公司、关键词优化、网站导航
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联