微信小程序自带的referer(附:微信,头条,支付宝,百度小程序的自带referer)

背景

一个获取列表信息的接口,在我在浏览器可以正常获取数据,但小程序的接口返回失败:/1invalid_request

定位问题

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

在后台业务中有域名白名单校验:

checkhost()函数会校验请求头中的referer字段的域名是否在白名单中。

1
2
3
4
5
//白名单
$config['whitehost'] = array(
'https://www.appblog.cn',
'https://www.yezhou.me',
.....);
1
2
3
4
5
6
7
//checkhost() 判断
if ($refer && (strpos($refer, $whiteHosts[$i]) !== false)) {
...
return true;
} else {
die('/1invalid_request');
}

如果校验白名单失败,则返回/1invalid_request

那么,就可能是小程序referer有问题了。对比一下PC 和 小程序调用此接口的referer

PC的请求头:

1
Referer: https://www.myhost.cn/

小程序的请求头:

1
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设置到域名白名单中即可:

1
2
3
4
5
6
//白名单
$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也可以实现跨域请求?

跨域请求限制是浏览器做的事情,而小程序的『浏览器』是微信,它想限制就限制不想限制就不限制

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :