昨天遇到一个非法referer
请求的问题,关键是测试环境可以,但是本地使用代理就不行。
referer
:是http请求头中自动加上的一个属性,标识的是网站来源,可以利用referer规避非法请求。例如:我这个网站只允许指定域名才可以访问,使用Locahost就请求不到接口信息。
最后这个问题是一个后端问题,但是由此我在这个事情上纠结了一天,一直以为是本地请求的地址不对。
解决问题过程中一些比较疑惑的点,在此记录。
Q:在axios.defaults.baseURL
中设置了url地址为/
之后为什么本地代理拦截不到请求呢?
A:可以请求到,请求不到说明可能是凭证没有拿到。需要在代理里面配置【目标访问地址】,【cookie】信息。
Q:如果可以使用axios.defaults.baseURL
那么使用proxy
又有什么用呢?
A:如果设置了axios.defaults.baseURL
,如果没有按照指定的规则是匹配不到的,也就不会使用本地代理了,走的就是axios
的配置。
Q:为什么有的时候需要将target设置成远程地址才可以?
A:因为本地的serverUrl
配置成了测试环境的地址,如果把serverUrl
改成【/】,本地代理配置下面的配置就会拦截请求地址,然后利用代理将远程地址转成本地的地址(服务端和服务端可以通信,服务端和浏览器端存在同源问题,会产生跨域问题),然后看到请求地址会是以【http://localhost:8080/xxx】开始的,但是调的接口是测试环境的接口,此时不用前端手动setCookie
就可以本地启动&访问了。
"/":{
target:"测试环境服务端地址",
changeOrigin:true,
//重写后者改变http请求
pathRewrite:true,
},
基础配置项说明:
//用于快速开发应用程序,相当于在本地起了一个服务,可以使用(域名+端口号)的方式在浏览器进行访问
devServer:{
host:"",//指定要使用的host,使你的服务可以被外部访问
hot:"true",//启用webpack的热模块更新,修改文件后,浏览器自动更新修改后的内容
//解决跨域问题,单独的API后端开发服务器并且希望在同一域上发送API请求.这种代理在很多情况下是很重要的,比如你可以把一些静态文件通过本地的服务器加载,而一些API请求全部通过一个远程的服务器来完成
proxy:{
"/api":{
target:"http://localhost:8080",//配置将/api的请求代理到http://localhost:8080/api
changeOrigin:true,
//重写后者改变http请求
pathRewrite:true,
},
}
}
参考1