vite cors
在vite开发服务器中处理跨域问题
跨域问题
跨域问题仅仅会在浏览器中出现,因为浏览器有同源策略,不允许不同源的请求。
同源策略
同源策略是浏览器的一个安全策略,它要求一个域名下的网页只能请求同域名下的资源,不同域名下的资源不能请求。
比如:https://www.baidu.com:443
下的网页不能请求https://www.google.com:443
下的资源。
浏览器对于这方面的要求是:
- 协议相同
- 域名相同
- 端口相同
https://www.baidu.com:443
https://www.google.com:443
这两个源协议、端口都相同,但是域名不同,所以不满足同源策略。浏览器在处理过程中会先把我们的请求进行放行,但是会对我们的响应进行拦截。
下面这里起一个示例的vite项目进行演示。
- 新建一个目录
- 进入目录,执行
yarn init -y
- 执行
yarn add vite -D
- 配置
package.json
文件,添加如下内容(一些项目启动和打包的命令)
1 | { |
- 新建文件index.html
- 新建目录src,src目录下新建一个文件index.js
下面是一些文件的内容
1 | fetch('https://www.baidu.com').then(res => { |
1 |
|
配置完毕之后来到项目的根目录下面执行yarn dev
启动项目,打开浏览器的控制台,会看到如下的错误信息:
打开浏览器的网络面板,可以看到我们请求百度是成功的,但是浏览器拦截了我们的响应。问题就出在浏览器的同源策略上。
vite开发服务器处理跨域问题
那要怎么处理呢,上文提到了,跨域问题仅仅会在浏览器中出现,那我们绕过浏览器,直接去请求百度,不就可以了。
在处理前端请求的时候,将请求先发送到我们的vite开发服务器,然后由vite开发服务器去请求百度,通过代理的方式将响应返回给浏览器。
配置代理之后,当请求实际上请求的是我们的vite开发服务器,vite开发服务器再去请求百度,然后将响应返回给浏览器。
由于网站和我们的vite开发服务器是同源的,所以浏览器不会拦截我们的响应。
vite开发服务器配置代理
在根目录下新建一个文件vite.config.js
,在文件中添加如下内容:
1 | import {defineConfig} from "vite" |
并且修改index.js中请求的url改为/api
打开浏览器控制台的网络选项卡
并且查看响应(response)的内容
可以看到我们的请求成功了,而且响应也成功了。