全栈工程师眼中的HTTP

余果
对于全栈工程师,HTTP是我们每天打交道最多的。如果前端工程师和服务器工程师坐在一起玩捉鬼游戏,他们对HTTP的描述可能会截然不同,对于这两个角色,HTTP是完全不一样的概念。 前端 前端工程师的职责是让一个网站尽可能快地展现在用户的浏览器中,并且讲究体验。 从他的角度来说,最直观地理解HTTP的方式是打开HttpWatch或者Fiddler,或者自己使用的浏览器的开发者工具中的“网络”标签页。这些工具会按照次序列出打开一个网站的时候发生了哪些事情: 发出了哪些请求 每个请求花了多长时间 每个请求的类型是文本、CSS、JS还是图片或者字体等 每个请求的状态码是200、还是from cache、或者是304、404等 每个请求产生的流量消耗是多少 每个请求gzip前是多大,以及gzip后是多大 图片: HttpWatch 因为对于用户的浏览器来说,并不会同时发起海量的请求,而且发起一个额外的请求产生的消耗并不多。但是浏览器却常常限定了对同一域名发起的并发连接数的上限——IE6/7和Firefox2等设计同时只能对一个域名发起两个并发连接,新版本的各种浏览器普遍把这一上限设定为4-8个。如果浏览器需要对某个域进行更多的连接,则需要在用完了当前连接之后重复使用或者重新建立TCP连接的方法。 由于浏览器针对域名限制并发连接数,而不是针对页面,所以很多静态资源可以放在其他域名下——包括子域名。这些子域名可以同时指向一个IP,但是就绕过了浏览器并发请求的限制。 这种做法除了可以增加浏览器并发,还有一个好处是,cookie是针对域的,如果把所有的资源都放在同一个主域下,那么对这个主域下所有资源的请求都会带上cookie信息,这对于带宽和网速都是很大的浪费。所以把静态资源放在其他的域名下,对静态资源的请求就是cookie free的。 此外,前端工程师经常做的优化是合并同一域下的资源——…