2025年01月27,这个问题好像依然没有解决。 图片使用的oss链接,指定webp后referer就正常了。
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?是否会安排修复?微信官方是否推荐这种防盗链的做法?
01-27