当在本地开发一个前后端分离项目时,肯定会遇到跨域问题
前端服务器:http://localhost:8080/
后端服务器:http://localhost:80/
由于端口号不同,所以当前端发送请求给后端服务器是会报403错误
最好的解决办法就是使用代理服务器,然后我看了那些讲原理的文章都没有说清楚原理,最重要的点就是设置代理服务器后,代理服务器和后端服务器确实不存在跨域问题了,但是你前端服务器和代理服务器之间同样是跨域,为什么这俩之间不会有跨域问题呢?(两个服务器要运行,端口必定不能相同),然而根本没有文章说清楚
先说结论
因为代理服务器使用了CORS,使得浏览器允许前端服务器访问代理服务器
什么是CORS?
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)
跨域问题的本质是浏览器的同源策略,也就是说浏览器觉得不安全,这次请求响应就不成功。
注意,错误是发生在浏览器端的。请求是可以正常从浏览器发到服务器端,服务器也可以处理请求,只是返回到浏览器端时出错了。
而CORS就是在服务端响应的时候添加一个 Access-Control-Allow-Origin 的响应头。
app.get('/get', (req, res) => {
// * 表示允许任何域名来访问 被请求的路由中设置请求
res.setHeader('Access-Control-Allow-Origin',‘*')
// 允许指定源访问
//res.setHeader('Access-Control-Allow-Origin','http://www.xxx.com')
res.send(Date.now().toString())
}
这样当前端访问代理服务器时,浏览器就不会再拦截,这就是基本原理。
同样也可以直接在后端服务器使用这个方法,但是这就要后端改代码,不如前端使用代理服务器简单,因为这些代码框架已经帮你写好了(如Vue代理服务器),你只需要配置好代理服务器的运行端口,要转发的后端服务器的地址,将你前端的访问地址由后端服务器地址改为代理服务器的地址,就完美的绕过了浏览器的拦截,成功解决跨域问题。
以上。
如有错误,欢迎指正