32.Webpack-Proxy

昨天遇到一个非法referer请求的问题,关键是测试环境可以,但是本地使用代理就不行。

referer:是http请求头中自动加上的一个属性,标识的是网站来源,可以利用referer规避非法请求。例如:我这个网站只允许指定域名才可以访问,使用Locahost就请求不到接口信息。

image.png

最后这个问题是一个后端问题,但是由此我在这个事情上纠结了一天,一直以为是本地请求的地址不对。

解决问题过程中一些比较疑惑的点,在此记录。

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

你可能感兴趣的:(32.Webpack-Proxy)