最近发现系统的微信认证很慢,有的甚至连接不上,发不出消息,就到网上搜索了下,还真发现了关于微信的细微变化,这点是表现在微信的请求方式上。
做广告路由器的人都知道,微信认证的前提是放行微信相关的域名,或者是采用过滤URL的方式放行跟weixin相关的字符串请求。
第一种方式的危险就在于更新微信服务器的时候,会导致以前的固件需要更新,第二种方式,也算是擦边球,如果里面不包含所请求的字符串,那就玩玩儿了。
所以了,这里抓包分析了下,发现微信现在并不是直接请求固定的域名了,而且通过如下方式:
这里采用
POST http://short.weixin.qq.com/cgi-bin/micromsg-bin/newauth HTTP/1.1
Accept: */*
Cache-Control: no-cache
Connection: close
Content-Length: 893
Content-Type: application/octet-stream
Host: short.weixin.qq.com
User-Agent: MicroMessenger Client
URL: weixin的绝对url.
整个架构图类似如下:
微信APP->HTTP/DNS代理服务器->微信服务器地址
这里我有两个疑问:
- 第三方服务器为什么是IP地址
- 微信APP什么时候更新的地址
第三方服务器为什么是IP地址
我仅仅可以想到两种好处:
- 分流,降低负载, 多个服务器可以分摊多用户对同一台服务器的请求压力。
- 躲过其他服务的过滤,这里也许是为了避过阿里DNS,自己的服务器作为DNS代理。
有了这两种好处,我想做也是必须的,万一哪天阿里使坏,微信可是要倒霉了。
再深思一下,就会觉得DNS代理是最靠谱的,毕竟如果做负载均衡,采用域名就好了,IP地址选用可以完全让APP和服务器之间建立直通链路,防止阿里狙击。
微信APP什么时候更新的地址
如果是升级6.1固件的时候做的那倒是没什么特别的。
如果不是,那就有意思了,难道微信内部存有接口,可以通过服务器定制数据来控制请求服务器的地址或者是动态修改。这样的逻辑还是挺有意思的。