其实是去年做的事情了,现在想起来做一个记录。
背景
小程序可以使用 webview
组件来嵌入 web 内容,对于常规域名需要通过域名所有权认证,对于微信公众号文章需要发布公众号与小程序关联,这在部分情况下是无法实现的(显示非自有公众号文章)。
所以,我们需要一个中间人来帮我们实现这个功能。
实现思路
当然就是实现一个反向代理了,能够反代 mp.weixin.qq.com
的内容。
实现方法
因为需求比较简单,还不至于到写代码的地步,用 nginx 实现就好。
然后访问一下就会有靓仔发现,我这个图片怎么显示不出来呢。
通过 network
可以看到图片请求由于 cors
限制导致失败,但是为什么普通的 GET
请求会被 cors
限制呢?
通过 initiator
观察可以看到请求是为了实现懒加载由 script
动态插入的 <img>
标签发出的。那么问题就来了,为什么这个 <img>
需要 cors
检查?
这里就需要一些简单的前端知识,mdn,在跨域条件下,默认 <img>
加载的图片资源会被认为是 tainted
的,除非为 <img>
加上 crossorigin
属性,会在请求中要求 cors
检查,并在浏览器进行 cors
校验。
在公众号文章场景下,并不存在需要 canvas
的场景,所以我们可以将 crossorigin
属性移除,以此来绕开 cors
限制。这里可以通过在 source
中搜索,将所有 crossOrigin
搜索出来,进行替换(主要就是几处 js)。
然后将 html
js link 指向 nginx,在 nginx 对 js 内容进行替换,顺便去掉所有的 referrer
。
注意如果需要替换内容,需要禁止 gzip
等压缩,否则内容无法被替换。
最终实现
server
{
server_name mp-proxy.weshine.club;
include weshine.ssl;
location /s/
{
add_header Referrer-Policy no-referrer;
sub_filter 'origin-when-cross-origin' 'no-referrer';
sub_filter 'strict-origin-when-cross-origin' 'no-referrer';
sub_filter 'crossorigin="anonymous"' '';
sub_filter 'res.wx.qq.com/mmbizappmsg/zh_CN/htmledition/js/assets/weui' mp-proxy.weshine.club/ass/weui;
sub_filter 'res.wx.qq.com/mmbizappmsg/zh_CN/htmledition/js/assets/appmsg.' mp-proxy.weshine.club/ass/appmsg.;
proxy_set_header Accept-Encoding '';
proxy_pass https://mp.weixin.qq.com/s/;
}
location /mp/
{
proxy_pass https://mp.weixin.qq.com/mp/;
}
location /ass
{
sub_filter 's.setAttribute("crossOrigin","Anonymous")' '1';
sub_filter 'e.crossOrigin="anonymous"' '1';
sub_filter 't.crossOrigin="anonymous"' '1';
sub_filter_types 'application/x-javascript';
sub_filter_once off;
proxy_set_header Accept-Encoding '';
proxy_pass https://res.wx.qq.com/mmbizappmsg/zh_CN/htmledition/js/assets;
proxy_buffering on;
proxy_cache mp_proxy;
proxy_cache_valid 200 1d;
}
}
这样就完工了。当然还有部分优化点,比如部分 js 文件过大,可以只留下需要的 js,其他的内容全部 302 出去。这里就不展开了。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 11210980@qq.com 进行处理!
本文地址:https://www.zycang.com/120851.html
文章转载或复制请以超链接形式并注明来源出处。 本文最后更新于:2024-03-06 06:59:28
声明:某些文章或资源具有时效性,若有 错误 或 所需下载资源 已失效,请联系客服QQ:11210980
请登录后发表评论
注册