微信小程序自带的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全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
微信小程序自带的referer(附:微信,头条,支付宝,百度小程序的自带referer)
背景 一个获取列表信息的接口,在我在浏览器可以正常获取数据,但小程序的接口返回失败:/1invalid_request 定位问题 HTTP Referer是header的一部分,当浏览……
<<上一篇
下一篇>>
文章目录
关闭
目 录