<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          別亂猜了! 這才是西安一碼通崩潰的真實(shí)原因

          共 2485字,需瀏覽 5分鐘

           ·

          2022-01-14 04:54

          點(diǎn)擊“開發(fā)者技術(shù)前線”,選擇“星標(biāo)”

          讓一部分開發(fā)者看到未來


          最近西安一碼通二次崩潰這個事情,實(shí)在是太頂了。

          網(wǎng)上一直在說崩潰是因?yàn)楹笈_傳輸?shù)氖菆D片?



          第一次看到這個消息的時候,我是抱有懷疑態(tài)度的。畢竟大家都知道這種大的政府項(xiàng)目都是要招標(biāo)的,能中標(biāo)到項(xiàng)目的公司也肯定不會差,怎么會犯這么低級的錯誤呢?

          今天又在知乎上看到了知友 “盧興民” 的回答,別人是真的去分析了二維碼接口數(shù)據(jù)的,證明并不是在服務(wù)器生成圖片。

          西安健康碼的接口數(shù)據(jù)


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


          這位知友表示:

          看下這個接口返回,設(shè)計上也沒有太大的問題。?

          主要問題集中在所有的js/css/img這些靜態(tài)資源全都從從一個出口進(jìn)行提供,沒上CDN

          粗略估算了一下,js/css/img數(shù)據(jù)總共約500kB

          按照從某個群里得到的數(shù)據(jù),暫且認(rèn)為是準(zhǔn)的,健康碼的請求量峰值達(dá)到了3.3w qps

          那按照這個量估計 33000 x 500 x 8 bps ≈ 125Gbps ?這個出口量級很難用單機(jī)房承載,峰值一來,出口網(wǎng)卡打滿,直接gg。

          到寫這個回答時,西安健康碼還是沒有將靜態(tài)資源上CDN,之后看看訪問量再起飛的時候,能不能扛得住吧。

          還有一位知友 “知乎用戶xv4Ddk” 就更詳細(xì)了,扒證據(jù)的詳細(xì)步驟都寫出來了。

          知乎回答原文如下:

          1、想直接抓 HTTP 包

          惦記通過 PC 微信打開「西安市民一碼通」抓個包,結(jié)果發(fā)現(xiàn)「個人電子碼」注冊時需要以西安的地址注冊

          常住或臨時地址都只能選擇西安的區(qū)/縣

          怕萬一給我健康碼搞紅了,所以沒敢繼續(xù)……

          簡單的路走不通,只能換一條復(fù)雜點(diǎn)的

          2、那就看看這個小程序咋寫的吧

          因?yàn)樽约菏翘O果手機(jī),于是找出之前用過的安卓模擬器(為啥不是虛擬機(jī)?因?yàn)槲译娔X里沒有 Android Studio 之類…)

          我真的不是拿這個(安卓模擬器)玩游戲,我發(fā)誓……

          具體步驟

          • 在安卓模擬器登微信小號,打開大號轉(zhuǎn)發(fā)來過來的「西安市民一碼通」小程序



          • 然后找到此路徑下的新增文件(*.wxapkg)


          Wxapkg就是緩存到本地的微信小程序包

          • 把它們拷到電腦上,用一個叫「wxappUnpacker」的東西解包,拿到微信小程序源代碼


          解包出來的小程序源代碼

          • 從源碼的 pages\index\index.wxml 中找到了個人電子碼,及其綁定的點(diǎn)擊事件「onElectronCode」,進(jìn)而跟蹤到「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

          —??—

          點(diǎn)這里??關(guān)注我,記得標(biāo)星呀~


          前線推出學(xué)習(xí)交流一定要備注:
          研究/工作方向+地點(diǎn)+學(xué)校/公司+昵稱
          (如算法+上海+小寶)

          掃碼加我微信,進(jìn)群和大佬們零距離

          后臺回復(fù)“電子書”?“資料”?領(lǐng)取一份干貨,數(shù)百面試手冊等你

          好文點(diǎn)個在看
          瀏覽 71
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产欧美自拍 | 久久逼逼 | A色V| 亚洲激情在线观看 | 在线观看三级 |