短链接:客户端和服务器每进行一次http操做,就创建一次链接,任务结束就中断链接。linux
短链接的操做步骤是:web
创建链接——数据传输——关闭链接...创建链接——数据传输——关闭链接
长链接:客户端和服务器之间用于传输HTTP数据的TCP链接不会关闭,客户端再次访问这个服务器时,会继续使用一条已经创建的链接。算法
长链接的操做步骤是:apache
创建链接——数据传输...(保持链接)...数据传输——关闭链接
HTTP实现长链接的方式缓存
HTTP 1.0须要使用keep-alive参数来告知服务器端要创建一个长链接,而HTTP1.1默认支持长链接。服务器
HTTP是基于TCP/IP协议的,建立一个TCP链接是须要通过三次握手的,有必定的开销,若是每次通信都要从新创建链接的话,对性能有影响。所以最好能维持一个长链接,能够用一个长链接来发多个请求。网络
HTTP 1.1支持只发送header信息(不带任何body信息),若是服务器认为客户端有权限请求服务器,则返回100,不然返回401。客户端若是接收到100,才开始把请求body发送到服务器。这样当服务器返回401的时候,客户端就能够不用发送请求body了,节约了带宽。并发
另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只须要跟服务器请求另外的部分资源便可。这是支持文件断点续传的基础。app
在网络中,一个IP对应多个域名。假设 使用Tomcat 搭建网站站点,在Tomact中搭建多个站点,站点使用相同的IP和PORT,当域名映射成ip,如何区分站点呢?使用Host。webapp
设置HOST,只须要编辑 server.xml 便可,实例以下:
<Engine name="Catalina" defaultHost="www.qiniu.com"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host name="www.qiniu.com" appBase="qiniuwebapp" unpackWARs="true" autoDeploy="true" > <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="qiniuwebapp_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <Host name="www.taobao.com" appBase="taobaowebapp" unpackWARs="true" autoDeploy="true" > <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="taobaowebapp_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <Host name="www.jb.com" appBase="jbwebapp" unpackWARs="true" autoDeploy="true" > <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="jbwebapp_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine>
如今能够用web server(例如tomat),设置虚拟站点是很是常见的,也便是说,web server上的多个虚拟站点能够共享同一个ip和端口。
HTTP1.0是没有host域的,HTTP1.1才支持这个参数。
HTTP2.0使用了多路复用的技术,作到同一个链接并发处理多个请求,并且并发请求的数量比HTTP1.1大了好几个数量级。
固然HTTP1.1也能够多创建几个TCP链接,来支持处理更多并发的请求,可是建立TCP链接自己也是有开销的。
TCP链接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。所以对应瞬时并发的链接,服务器的响应就会变慢。因此最好能使用一个创建好的链接,而且这个链接能够支持瞬时并发的请求。
HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
HTTP 2.0 新增的一个强大的新功能,就是服务器能够对一个客户端请求发送多个响应。换句话说,除了对最初请求的响应外,服务器还能够额外向客户端推送资源,而无需客户端明确地请求。
有了HTTP2.0的服务器推送,HTTP1.x时代的内嵌资源的优化手段也变得没有意义了。并且使用服务器推送的资源的方式更加高效,由于客户端还能够缓存起来,甚至能够由不一样的页面共享(依旧遵循同源策略)。