Introduction to Computer Networking学习笔记(二十四):HTTP、SPDY

HyperText Transfer Protocol(HTTP) 超文本传输协议是现今因特网的一大基石。也是面试中经常问的一个问题。

HTTP包含请求和回复,下面分别是请求和回复的格式:

上图为请求。包含请求方式(比如GET、POST)、URL(域名+资源名)、HTTP版本(HTTP/1.1)。白色留空代表空格。左箭头代表返回这一行的开头,下箭头代表下一行。接下来是零个或多个header,每个占一行,开头为header名,空格后是值。所有header之后空一行。最后是body,当method为GET时body为空,但是其他method可能有body,比如POST。

上图为回复。开头包含HTTP的版本,接下来是状态码和短语(比如 200 OK或404 Not Found)。接下来是headers,与请求类似。空一行后是body。

 

当client向服务器请求一个网页内容时,网页内可能包含图片或者文件等,这些文件或者图片在html中又以URL的形式表示,当client接收完这个网页的所有内容后,服务器会断开连接,client继续请求网页内图片或文件所在的URL,获取文件或者图片。由于本地可能对当前请求的页面进行了缓存,服务器还可以根据请求内的header,决定是否需要重新发送页面内容。这就是HTTP/1.0做的事情。即:

  • 打开连接;
  • 请求页面内容 GET;
  • 服务器回复后关闭连接。

HTTP/1.1做了一项重要的改进,Keep Alive header。在HTTP/1.0中,当需要请求嵌入的第二个文件时,需要重新建立连接,而每个连接发送内容都很少,这种情况下拥塞窗口没有机会增长到很大,并且浪费了很多时间在建立连接上。因此HTTP/1.1通过增加一些headers解决了这个问题:

1. 在请求中添加header:

  • keep-alive:告诉服务器“请保持连接,我还会请求更多内容”;
  • close:告诉服务器回复完后直接关闭连接;
  • 服务器将根据情况决定,并不完全依照请求内的header

2. 在回复中添加header:

  • keep-alive:告诉客户端我保持了连接
  • close:告诉客户端我关闭了连接

3. 在回复中添加Keep-Alive header:

  • 告诉客户端我将会保持连接多久。

那么问题来了,这看起来微不足道的改变有多大影响呢?看下面这个例子:稍作解释,1.0版本建立连接时SYN 50ms,接收SYN+ACK 50ms,发送完ACK后直接发送Request,打包加发送51ms,服务器回复两个包,打包加发送52ms,一共203ms。之后没两张图片同时传送,耗费6*(100+103)ms,一共1421ms。而对于1.1版本,建立连接发送请求203ms,之后由于不断开连接,可以连续在这个链接内发送11个请求,打包加传输11+50=61ms,服务器回复22个包,打包加传输22+50=72ms,共123ms,总共326ms。延迟是1.0的三分之一。

最后插了一嘴SPDY。SPDY是Google提出的用来加速网页打开的协议。允许服务器回复顺序与请求顺序不一致,比如你只做了一个动态网页,加载整个页面是比较慢的,但是大部分内容其实是一些简单地图片和文字,则可以先将图片和文字加载并显示出来,最后慢慢加载显示动画部分。另外SPDY删除了冗余的headers,因为HTTP往往含有很多冗余的headers。SPDY成为了HTTP/2.0的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值