京东在用 .NET 吗?

很多人在讨论 .net 的时候,都会拿出京东做例子。支持者说京东能用 .net,说明 .net 很好,只要用得好,可以做大型网站。反对者说京东早期是用 .net 的,但是网站做得很烂,完全不能支撑业务,转投 java 的怀抱之后才好转,所以 .net 不如 java。

其实 web 程序员都知道,一个网站用什么技术,可以在 http 请求和响应中看出来,只要这个网站不是故意去伪装的话。一般网站没有什么动机去伪装自己所用的技术。

web 的早期,几种技术架构的请求链接都不同,java structs 的喜欢用 .action 和 .do 后缀,php 则是 .php,.net 是 .aspx。现在的大型网站一般都会隐藏后缀,因为从链接的设计美学来说,后缀不能表达任何有用的信息。

访问京东的首页:www.jd.com,响应头如下:

可以看到服务器是 JDWS/2.0,一般来说,这是反向代理服务器,可能是二次开发的 Nginx 吧。

顺着请求顺序往下看,可以看到两个有后缀名的资源:

.ashx 是 asp.net 的一般请求,.php 望文生义是 php 了。

helloService.ashx 的响应体:

这是一个登录的引导语。

hotWords.php 的响应体是一个 json,可以看出来是获取搜索热词的。

前面说到,有后缀的链接是多余的,但是这两个请求是 ajax 异步请求,是不显示在浏览器的地址栏的,而且一般隐藏后缀需要做 url 重写,所以很多程序员在处理 ajax 请求链接的时候,保留了原技术架构的后缀。

看到这里,可以知道京东既用了 .net,也用了 php。这两个请求的响应头的 server 项分别是:

一个是 JengineD,一个带版本号的 JengineD,这个更像是 Nginx 了,Nginx 本来就是 engine X 的意思。

再往下看,还有一个 .aspx 的请求:

看文件名,应该是一个登录状态检查请求。这个请求和前面的 helloService.ashx 请求的域名都是 passport.jd.com,结合这个域名来看,我认为京东的用户部分是用的 asp.net。

点击登录,会跳转到 passport.jd.com/new/login.aspx,这也是一个 asp.net 页面,甚至没有做 url 重写的 web form 页面。据说,刘总也做过码农,在创业之初选用 .net 技术应该和自己的技术习惯有关。我觉得,电子商务系统的用户部分属于负载较小的部分,业务逻辑也简单,可能是这个原因这部分被一直沿用下来。

点击“我的订单”,跳转到了 order.jd.com/center/list.action,这个链接也没有隐藏后缀,这是一个 java structs2 的后缀。查看这个页面的异步请求:

还有大量的 .action 请求。

点击手机的子目录,ajax 请求也是以 .action 为主:

方法名也让人很容易理解,这种首字母小写的骆驼命名法,也是典型的 java 风格。其实做得很工整,我就懒得去写 get … by … 这种模式的方法名,当然,我有我的理由,这个以后再说说。

看到这里,可以说京东的商品、订单系统是用 java structs2 做的。对于一个网上商城来说,商品、订单是核心的部分,那么可以说,京东主要是用 java 开发的,而不是 .net。

在“我的订单”页面,还有 .do 后缀的请求:

响应体:

据说 .do 是 java spring mvc 的后缀。这个请求是获取京东白条的相关信息的,白条是京东金融的一部分,我没有进一步去印证,不过根据现有的信息,可以猜想京东金融用的就是 java spring mvc。

京东金融是京东商城之后发展起来的业务,没有使用 .net 技术,即使发展新的业务,京东也不再使用 .net 了。

前面还提到京东的首页有 .php 的请求,是获取搜索热词的,我找了一下,.php 请求还有获取商品索引、ip 信息的。估计京东也有 php 团队在做一些功能模块,但不是像 java 这样,占核心的位置。

响应头的 server 这一项,变化也比较多,还有用 openresty 的,可见他们在技术上,也有多个方向的尝试。

那么既然京东主要用的不是 .net,是不是 .net 不适合做大型网站呢?我认为是的,主要有三个方面的原因,一个是众所周知的成本问题,微软的产品都收费;二是闭源问题,没有办法查看、修改源代码,这样会损失对自己的产品的控制力,大企业对这个会更在意;三是 asp.net 的 web form 设计不适合做大型网站,虽然现在有了 asp.net mvc,但是短时间内无法扭转劣势。


广州必简信息科技有限公司 版权所有 粤ICP备15047625号-2