例如,运行H5页面,请求一个地址资源,如果不是本站地址,浏览器就会报跨域错误,这样访问受限

问题呈现

例如,项目代码里是这样写的,运行H5测试

uni.request({
	url:'https://gitcode.net/zs1028/stat...ouces_2023/-/...',
	success(res) {
		console.log(res)
	},
	fail(err) {
		console.error(err)
	}
})

因为https://gitcode.net不是本站地址,根据浏览器同源策略,是会报跨域错误,

解决步骤

打开项目的manifest.json文件,以源码视图查看,添加以下代码

{
	//...
	"h5": {
		/* 跨域代理 */
		"devServer": {
			"port": 5174,
			"disableHostCheck": true,
			"proxy":{
				"/zs1028":{
					"target": "https://gitcode.net",
					"changeOrigin":true,
					"secure": false
				}
			}
		}
	},
	//...
}

解释以下

  • 属性port是本站的服务器访问IP对应端口号,如果是发布的网站,应该填80或者443
  • 属性/zs1028是本地的访问接口,接口如果是/zs1028...这样,就会交给本地服务器代理访问

最后,改成以下代码,就能跨域访问了,实际上是代理访问

uni.request({
	url:'/zs1028/stat...ouces_2023/-/...',
	success(res) {
		console.log(res)
	},
	fail(err) {
		console.error(err)
	}
})

代理这一次陌生?第一次听说不要紧,来科普一下,

代理访问
直接访问
访问外部地址
失败
浏览器
本地站点-服务器
被拦截
外地站点

代理,比如生活中找来的中介差不多的意思

【uniapp】uni.request请求跨域问题解决方案