辟謠!這才是西安一碼通崩潰的真實原因!
最近西安一碼通二次崩潰這個事情,實在是太頂了。
網(wǎng)上一直在說崩潰是因為后臺傳輸?shù)氖菆D片?
第一次看到這個消息的時候,我是抱有懷疑態(tài)度的。畢竟大家都知道這種大的政府項目都是要招標的,能中標到項目的公司也肯定不會差,怎么會犯這么低級的錯誤呢?
今天又在知乎上看到了知友 “盧興民” 的回答,別人是真的去分析了二維碼接口數(shù)據(jù)的,證明并不是在服務(wù)器生成圖片。
西安健康碼的接口數(shù)據(jù)

真正的二維碼數(shù)據(jù)是 /person/app/refreshQRCode這個接口

這位知友表示:
看下這個接口返回,設(shè)計上也沒有太大的問題。
主要問題集中在所有的js/css/img這些靜態(tài)資源全都從從一個出口進行提供,沒上CDN
粗略估算了一下,js/css/img數(shù)據(jù)總共約500kB
按照從某個群里得到的數(shù)據(jù),暫且認為是準的,健康碼的請求量峰值達到了3.3w qps
那按照這個量估計 33000 x 500 x 8 bps ≈ 125Gbps 這個出口量級很難用單機房承載,峰值一來,出口網(wǎng)卡打滿,直接gg。
到寫這個回答時,西安健康碼還是沒有將靜態(tài)資源上CDN,之后看看訪問量再起飛的時候,能不能扛得住吧。
還有一位知友 “知乎用戶xv4Ddk” 就更詳細了,扒證據(jù)的詳細步驟都寫出來了。
知乎回答原文如下:
1、想直接抓 HTTP 包
惦記通過 PC 微信打開「西安市民一碼通」抓個包,結(jié)果發(fā)現(xiàn)「個人電子碼」注冊時需要以西安的地址注冊
常住或臨時地址都只能選擇西安的區(qū)/縣
怕萬一給我健康碼搞紅了,所以沒敢繼續(xù)……
簡單的路走不通,只能換一條復雜點的
2、那就看看這個小程序咋寫的吧
因為自己是蘋果手機,于是找出之前用過的安卓模擬器(為啥不是虛擬機?因為我電腦里沒有 Android Studio 之類…)
我真的不是拿這個(安卓模擬器)玩游戲,我發(fā)誓……
具體步驟
在安卓模擬器登微信小號,打開大號轉(zhuǎn)發(fā)來過來的「西安市民一碼通」小程序
然后找到此路徑下的新增文件(*.wxapkg)

Wxapkg就是緩存到本地的微信小程序包
把它們拷到電腦上,用一個叫「wxappUnpacker」的東西解包,拿到微信小程序源代碼

解包出來的小程序源代碼
從源碼的 pages\index\index.wxml 中找到了個人電子碼,及其綁定的點擊事件「onElectronCode」,進而跟蹤到「onYmtLogin」->「toYmtLink」-> 「toElectronCode」

找到了一碼通的地址,原來是小程序打開外部網(wǎng)頁
其中
N = getApp(),從源碼的 app-service.js 中,找到 globalData.ymtUrl 的值
拼接出完整 URL(就是參數(shù)不全),瀏覽器訪問了一下

然后發(fā)現(xiàn)了 qrcode.js,在里面找到了「personCodeShow」->「qrcodeColour」
function qrcodeColour(e, t, a, o) {var s = baseUrl + "/view/login.html?code=" + t, i = 300, r = 300, n = i, d = r, p = 80, l = 80, c = (i - p) / 2, u = (r - l) / 2, m = $(e).qrcode({render: "canvas",text: s,width: i,height: r,background: "transparent",foreground: a}), g = m.find("canvas").get(0), C = new Image;C.src = g.toDataURL("image/png"),C.onload = function() {g.width = n,g.height = d;var e = g.getContext("2d");e.fillStyle = "#ffffff",e.fillRect(0, 0, g.width, g.height),e.drawImage(C, 0, 0);var t = new Image(p,l);t.src = o,t.onload = function() {e.drawImage(t, c, u, p, l)}}}
最終結(jié)果:沒有在服務(wù)端生成二維碼圖片!
相關(guān)鏈接
https://www.zhihu.com/question/509914161/answer/2299099095
https://www.zhihu.com/question/509914161/answer/2299646933
程序員技術(shù)交流群
隨著讀者越來越多,我也建了幾個技術(shù)交流群,九分聊技術(shù),一分聊風雪,歡迎有興趣的同學加入我們。 可以長按識別下方二維碼,一定要注意:城市+昵稱+技術(shù)方向,根據(jù)格式,可以更快捷地通過選擇內(nèi)容進入群。 ▲長按掃描
閱讀更多

【筆記本電腦抽獎方式】






