iOS环境微信小程序image组件网络调用referer头不符合文档规范
按照微信小程序网络基础能力文档: 网络请求的 [代码]referer[代码] header 不可设置。其格式固定为 [代码]https://servicewechat.com/{appid}/{version}/page-frame.html[代码],其中 [代码]{appid}[代码] 为小程序的 appid,[代码]{version}[代码] 为小程序的版本号,版本号为 [代码]0[代码] 表示为开发版、体验版以及审核版本,版本号为 [代码]devtools[代码] 表示为开发者工具,其余为正式版本。 但iOS版本微信小程序的image标签组件似乎并没有遵循这个标准。 我们利用image组件文档上的官方样例创建了一个demo,将image的src属性替换为了我们自己服务的图片地址(该域名已被配置在小程序业务域名中)。主要代码如下: <view class="page">
<view class="page__hd">
<text class="page__title">image</text>
<text class="page__desc">图片</text>
</view>
<view class="page__bd">
<view class="section section_gap" wx:for-items="{{array}}" wx:for-item="item">
<view class="section__title">{{item.text}}</view>
<view class="section__ctn">
<image style="width: 200px; height: 200px; background-color: #eeeeee;" mode="{{item.mode}}" src="https://***.cn/***"></image>
</view>
</view>
</view>
</view>
随后,我们使用搭载iOS15.5的iPhoneX运行微信8.0.23打开这个小程序,下面是服务端抓到的部分请求头 GET /*** HTTP/1.1
Host: ***.cn
accept: image/webp,image/png,image/svg+xml,image/*;q=0.8,video/*;q=0.8,*/*;q=0.5
accept-encoding: gzip, deflate, br
user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.23(0x1800172a) NetType/WIFI Language/zh_CN
accept-language: zh-CN,zh-Hans;q=0.9
referer: https://servicewechat.com/
可以看到,referer头仅包含域名servicewechat.com的内容,并没有带上后面的appid等详细信息 然而,我们再使用搭载Android 12的小米10Pro运行微信8.0.23打开这个小程序,下面是服务端抓到的部分请求头 GET /*** HTTP/1.1
Host: ***.cn
user-agent: Mozilla/5.0 (Linux; Android 12; Mi 10 Pro Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220505 Mobile Safari/537.36 MMWEBID/7900 MicroMessenger/8.0.23.2160(0x28001751) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android
accept: image/avif,image/webp,image/wxpic,image/tpg,image/apng,image/*,*/*;q=0.8
x-requested-with: com.tencent.mm
sec-fetch-site: cross-site
sec-fetch-mode: no-cors
sec-fetch-dest: image
referer: https://servicewechat.com/wxf3e783b48943fae6/0/page-frame.html
accept-encoding: gzip, deflate
accept-language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
可以看到referer头是完全符合文档格式的传递方式。 同时,利用微信开发者工具进行调试时,抓到的请求也是完全符合文档格式的: [图片] 由于我们的服务依赖referer头做防盗链校验,且referer头内的appid参与了校验,iOS端的这种传参方式会导致防盗链校验失败。 请问这是否是一个BUG?是否会安排修复?微信官方是否推荐这种防盗链的做法?