微信小程序自带的referer(附:微信,头条,支付宝,百度小程序的自带referer)
背景
一个获取列表信息的接口,在我在浏览器可以正常获取数据,但小程序的接口返回失败:/1invalid_request
定位问题
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
在后台业务中有域名白名单校验:
checkhost()
函数会校验请求头中的referer字段的域名是否在白名单中。
//白名单
$config['whitehost'] = array(
'https://www.appblog.cn',
'https://www.yezhou.me',
.....);
//checkhost() 判断
if ($refer && (strpos($refer, $whiteHosts[$i]) !== false)) {
...
return true;
} else {
die('/1invalid_request');
}
如果校验白名单失败,则返回/1invalid_request
那么,就可能是小程序referer有问题了。对比一下PC 和 小程序调用此接口的referer
PC的请求头:
Referer: https://www.myhost.cn/
小程序的请求头:
Referer: https://servicewechat.com/{appid}/{version}/page-frame.html
解决方案
在微信小程序中:网络请求的 referer 是不可以设置的,格式固定为 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版
参考:https://blog.csdn.net/wl1769127285/article/details/53690640
原来如此,微信小程序有自带 referer,且不可修改
只需要将https://servicewechat.com
设置到域名白名单中即可:
//白名单
$config['whitehost'] = array(
'https://www.appblog.cn',
'https://www.yezhou.me',
'https://servicewechat.com' //微信小程序
.....);
其他平台的referer格式
平台 | referer | 备注 |
---|---|---|
微信小程序 | https://servicewechat.com/{appid}/{version}/page-frame.html |
|
头条抖音 | https://tmaservice.developer.toutiao.com |
|
百度小程序 | https://smartapps.cn/{appKey}/{version}/page-frame.html |
百度小程序请求referer调整 |
支付宝 | https://你的appid.hybrid.alipay-eco.com |
关于跨域
服务端跨域配置中也需要提前获取到小程序请求的referer,但是微信小程序为什么不设置Access-Control-Allow-Origin
也可以实现跨域请求?
跨域请求限制是浏览器做的事情,而小程序的『浏览器』是微信,它想限制就限制不想限制就不限制
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/04/01/wechat-applet-own-referer-attached-wechat-toutiao-alipay-baidu-applet-own-referer/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论