0%

请求乱码

需要在conf/server.xml中添加URIEncoding='UTF-8'

1
2
<Connector port='8080' protocol='HTTP/1.1' connectionTimeout='20000'
redirectPort='8443' URIEncoding='UTF-8' />

Tomcat请求回复体的缺省字符集编码是ISO-8859-1

官方字符编码介绍

command-shot

windows下的cmd对比Linux下的bash及OSX下的terminal都相差深远,但平时还是会用到,这里将常用命令记录下。

环境变量

  • 显示环境变量NODE_ENV

$ set $NODE_ENV

  • 设置环境变量NODE_ENV

$ set NODE_ENV="production"


网络操作

  • 查看端口占用情况
    $ netstat -ano
  • 查看hiding端口的占用情况
    $ netstat -ano|findstr "3001"
  • 查看PID对应的进程
    $ tasklist|findstr "22222"
  • 结束该进程
    $ taskkill /f /t /im node.exe

Win下执行tsc --version发现版本是1.0.3.0,郁闷之极,安装的是2.3.4,执行下where命令,明白

版本信息

系统环境变量

删除配置后再执行

再次执行tsc --version

C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0该路径下的ts推断是安装VS时附带的。

我们开发的网站面对的是特定的人群,为了方便用户登录,做了IP登录,即用户只要在特定的网络环境下访问我们的网页,就可以直接登录。
但发现,用户在微信浏览器中访问我们的网页,但是同样网络环境下,用手机浏览器访问就不存在此问题。

首先面对这个情况-IP登录不行唯一的可能是IP地址变了,我用微信访问我们站点中的测试页面(IP及UA头部信息会贴出来),显示出用户的实际IP,发现,IP变了,那么对此只有一个可能性–微信进行了网络代理!!!

微信IP代理

分别使用我手头的安卓手机魅蓝note5和苹果手机iPhone6下的微信客户端访问出问题的网页,获取对应的ip地址信息,结果如下,
vs
看到这个结果,也要想到,是不是就这个网页存在此问题呢,我试试别的网页,如下为我自己搭建的站点,分别通过如上手机访问
vs-2
阿偶,发现不存在代理信息,那就证明微信并不是所有站点都走代理

说明:

  • IP即为后端通过请求信息拿到的ip,即为客户端的真实IP
  • IPS即为X-Forwarded-For,会记录客户端连接web服务器通过的层层代理IP信息

Google play上的微信

既然苹果版微信没有代理,而安卓版对于部分站点会存在代理,有这个差异,很大程度是苹果本身也严格,那么很容易想到国外版微信呢,毕竟谷歌商店也是很严格的,
so,下载了google商店的微信app,访问网站,发现与苹果一致,不存在代理ip问题。

结论

  • 微信安卓版与苹果版存在差异,苹果版不存在代理IP问题
  • 微信安卓版访问不同的站点,访问A站点IP不变,访问B网站,IP被代理,且代理字段本身不会添加跳板IP信息
  • Google Play下载的微信客户端访问任何网站不存在代理问题,与苹果版微信一致
  • 国内微信安卓版进行网络代理,并不是将代理信息放在X-Forwarded-For,也就意味着,服务器端不可能拿到客户端的真实IP

至于微信针对哪些站点,才会进行网络代理,那么这个就需要直接跟微信客服沟通得到了,单纯去测试找规律,费时且无意义。

app的开发牵扯两端,前端和后端,目前技术多种多样,存在很多选择,合适的场景即合适的需求,选择合适的技术,才是王道,技术只是工具。
因为我也做过了好多款app,所以这里总结一点心得体会。

前端

app属于客户端,也可以叫做前端,目前有三种方案

  • 原生

    开发成本较高,安卓、苹果两套技术,维护成本也随之提升,但原生是最为成熟的开放方式,倘若精致的app,还是强烈推荐原生,不要自寻死路。
  • react native

    对比原生,能够一定程度的缩减成本,部分功能实现组件化,所以可以复用,但有些定制化的功能还是需要自写轮子,一定程度需要懂原生。
  • hybrid

    利用Cordova等跨平台框架,采用web开发方式进行开发,牵扯到底层硬件,采用js方式调用

后端

后端的方案就更多了,如phpnetjavapython等,总而言之就是建议采用restful风格跟app即前端进行数据交互即可。

轻量APP方案选择

在实际的开发中,我也做的比较多了,对于小的APP项目,我建议采用ionic+expressjs的方案去dev。

ionic+expressjs

优势

  • ionic算是很成熟的混合开发技术,github上也有30k星了,成熟度不言而喻,另外目前的ionicv3对比之前的ionic1,性能上有了明显的提升,
    当然现在的启动白屏还是过长,这点应该几周内就可以解决,因为v4要发布了,另外ionicv3目前采用的js框架是angular,之前的叫angularjs,
    ng现在的模块化及微软大法推出的ts,这么多的美妙技术结合,真的生产力巨高。
  • expressjs是node下的最火框架,node本身这几年也很火,而expressjs贵在简单,天然的适合写restfulAPI

所以倘若是小的项目,其实这是个不错的方案,当然如果APP后端需要管理平台,那也不是什么问题,有现成的架子可以用ng2-admin