如图,这是我项目在 vite.config 的 server 配置。
问题1:为什么配置这样一段代码就解决跨域问题了呢?
问题2:服务器和服务器之间的请求有没有跨域这样的存在呢?(我了解到的是跨域是浏览器的限制,是我理解错了吗)
(请大家把我当成一个网络小白,但不是特别小白 >.<)
如图,这是我项目在 vite.config 的 server 配置。
问题1:为什么配置这样一段代码就解决跨域问题了呢?
问题2:服务器和服务器之间的请求有没有跨域这样的存在呢?(我了解到的是跨域是浏览器的限制,是我理解错了吗)
(请大家把我当成一个网络小白,但不是特别小白 >.<)
1.proxy工作原理实质上是利用http-proxy-middleware 这个http代理中间件,实现请求转发给其他服务器,对于为什么只在开发服务器,因为技术只是在webpack打包阶段临时生成了node serve,来实现nginx的proxy_pass的反向代理。
2.跨域指的的浏览器不能执行其它网站的脚本。它是由浏览器的同源策略导致的,是浏览器对js实施的安全措施。
普通人话版本,你在本地启动服务的时候,会启动一个Node进程,这个服务中有一个HTTP服务,所以你可以通过ip访问到你的项目。当你配置了 proxy
之后会启动一个HTTP代理服务,将你发送到代理服务器的请求转发到目标服务器。
这样浏览器就会认为是同源(发起的客户端和请求服务器处于同源状态)就可以解决跨域问题了。
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
你的第二个问题的答案,也同时是第一个问题的答案。
跨域限制是浏览器的安全策略。除了浏览器以外的场景,HTTP 协议本身是没有跨不跨域这一说的。所以服务器和服务器之间自然没这个问题。
而你在开发环境下,实质是启动了一个本地的服务器(看到 proxy 上面的 server 字眼了吗?),这样原本的
前端 → AJAX → 远程服务器
这样的调用关系,会被代理成前端 → AJAX → 本地服务器 → Http → 远程服务器
这样 —— 你跟本地服务器是同源的、没有跨域问题,而服务器跟服务器之间没有跨域一说,自然跨域问题就被解决了。