谈谈HTTP2.0中的二进制分帧
帧的概念在我们的计算机网络课本中,是数据链路层的定义。
所谓数据帧(Data frame),就是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包,等等。
帧的概念在我们的计算机网络课本中,是数据链路层的定义。
所谓数据帧(Data frame),就是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包,等等。
1991年, 万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(IETF)制定了 HTTP 0.9 标准。因为那个年代互联网还在普及,加上网速带宽低,所以 HTTP 0.9 只支持 GET 请求。
1996 年 5 月,HTTP/1.0 版本发布,HTTP 协议新增很多内容。首先是请求方式的多样化,从单一的 GET 请求,增加了 POST 命令和 HEAD 命令。除此之外,还支持发送任何格式的内容。这两项新增内容,不仅使得互联网不仅可以传输文字、传输图像、视频、二进制文件,还丰富了浏览器与服务器的互动方式。这为互联网的大发展奠定了基础。
在搜索引擎中每个文件都对应一个文件ID,文件内容被表示为一系列关键词的集合(实际上在搜索引擎索引库中,关键词也已经转换为关键词ID)。例如“文档1”经过分词,提取了20个关键词,每个关键词都会记录它在文档中的出现次数和出现位置。
多个HTTP可以复用同一个TCP链接吗?
短连接需要,长连接不需要。
现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开呢?
如果会,那什么情况下会断开?
在 HTTP/0.9 版本中,HTTP 请求是以短连接进行的,因此在发送完 HTTP 的响应之后,服务器就会断开 TCP 连接。
可是这样是一件很耗资源、很耗时间的事情,所以在 1.0 版本中,新增了 keep-alive 字段,让长连接被 HTTP 支持了(此时默认还是不会开启长连接)。
所谓长连接,就是完成这个 HTTP 请求之后,不要断开 HTTP 请求使用的 TCP 连接。好处是连接可以被重新使用,之后发送 HTTP 请求的时候就不需要重新建立 TCP 连接了,以及如果维持连接,那么 SSL 的开销也可以避免。
开发问题(每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便);性能问题(增删数据都需要检查其他table),并发问题(修改数据需要额外的锁,高并发场景容易产生死锁),扩展性问题(分库分表时外键会失效)