有时候在本地进行开发时,可能会遇到跨域的问题,我所知道的有这么几种解决方案:
- 使用 jsonp(需要服务端配合)
- 使用 cors(需要服务端配合)
- 浏览器端禁用同源策略
- 使用 vue/react 等脚手架中的代理配置
- 使用其他服务器的代理配置
可能还有其他的方法,但这些方法是较为常用了。
个人认为,如果不涉及到请求外站的资源,使用 jsonp 的意义不大,最好是服务端进行跨域资源共享(CORS)的配置,这样最简单方便,几乎不需要前端做什么事情。
最近我们一个项目中也遇到了跨域的问题,服务端开启了 CORS 后无效(可能是服务端设置不完全所致),于是我在本地使用 nginx 进行反向代理配置。配置的过程很简单,下面进行一下简单的记录。配置步骤一共分为两步(如果你没有安装 nginx 的话)。
安装 nginx
我使用的是 windows 操作系统,因此需要下载 windows 版的 nginx,下载地址:http://nginx.org/en/download.html
下载对应版本后解压到某个文件夹就可以了。
配置 nginx.conf
接下来就是对 nginx 进行配置,打开 nginx 所在的文件夹,进入 conf 文件夹,打开 nginx.conf,进行简单的修改:
server {
listen 80;
server_name localhost;
root [这里填写站点根目录];
# 这个是项目中的接口地址
location /[项目接口地址]{
proxy_pass [服务器 IP];
}
...
}
遇到的一些小坑
这期间也遇到了几个小坑:
1.权限问题
由于我的电脑是用了固态硬盘,所以我把所有的软件都安装在 C盘,nginx 也是如此,但将 nginx 安装到 C盘后,出现了一些奇奇怪怪的错误,比如无法写入日志,无法访问到配置文件等等。最后将 nginx 移动到其他盘得以解决。
2.net::ERR_BLOCKED_BY_CLIENT 问题
这个其实和 nginx 没有什么关系,我在配置了 nginx 的反向代理后,还是无法在页面中访问到服务器的数据,但是将接口地址复制到新窗口打开,是可以获取到内容的,这就就纳闷了。
最后在网上搜索,可能是一些广告屏蔽插件造成的,于是我对插件进行了一些设置,不要对我们的项目进行屏蔽,问题就顺利解决了。
完。