HTTP规范对HTTP报文解释的清清楚楚,但对HTTP连接介绍的并不多,HTTP连接时关键通道, 下面这一章节,你能了解到如下内容:
当浏览器受到一个URL的时候,会做如下事情:
TCP的数据是通过IP分组的小数据块来发送的,这样子,那么HTTPS 其实HTTP就是TCP和IP之间插入一层(称之为TLS或SSL的)密码加密层。 下图很好的诠释了http和https之间的区别。http要传输一条报文的时候,会以流的形式将报文数据的内容穿过打开一条TCP连接按序传输。TCP收到数据流之后,会将数据流砍成几段被称之为段的小数据块,并将段封装在ip中,通过internet进行传输,所有这些都是由TCP/IP来完成的,http程序什么都看不到。
每个TCP段都是由IP分组承载的,从一个ip地址发送到另一个ip地址,每个ip分组中包括:
IP首部包含了源和目的IP地址,长度和其他标记,TCP段的首部包含了TCP端口号,TCP控制标记,以及一些用于数据排序和完整性检查的一些数字值,
在任意时刻,计算机都有几条TCP连接处于打开状态,TCP是通过端口号来保持这些连接持续不断的运行下去。 端口号和雇员使用的电话分机号很类似,tcp连接通过4个属性来连接 <源ip地址,端口号,目的ip,目的端口号> 上面4个唯一值定义了一条唯一连接。两条不同的tcp不能拥有4个完全相同的地址组件值(但是不同的连接的部分组件可以拥有相同的值)。
HTTP紧接着TCP,位于其上层,所以HTTP事物的性能,很大程度上取决于底层TCP性能。
HTTP事物的演示主要有以下几点原因
TCP握手如下步骤
最终结果是,小的HTTP事物可能会在TCP连接上花费50%,
如果只对连接进行简单的管理,TCP的性能时延会可能叠加,比如某个页面,htm文件,另外三个图片url,如果每个事物都需要一条新的http请求,这个时候如果是串行,通过以下方法提高连接速度
并行连接肯定很快,但是不可能总是最快,因为这个涉及到一个带宽的问题。
初始化之后,可能会陆续发起其他请求,这个时候就好触发持久链接,在事物处理完成之后,连接依然保持,这种就是持久连接,持久于并行连接一起用,会是一种最好的方式,持久连接就是keep-alive。
http1.1逐渐停止了对Keep-alive的连接支持,,用一种持久连接来替代它。(persistent connection)的改进设计取代它,持久连接的目的于keep-alive连接的目的相同,但是机制更加优先。 浏览器默认除非收到一条Connection: close首部,不如,http连接依然处于连接状态。
持久连接的基础上才能使用管道连接,当你发送第一条连接的时候,还没有返回,第二条也开始发送,这就是管道连接。管道化连接使用原则:
如果客户端已经打开一条服务器持久连接,可以使用那条连接来发送请求,否则,打开一条新的到服务器的连接。
连接上有数据的时候,
当web请求抵达缓存时候,,如果本地有副本就不会再次请求其他东西。瞬间拥挤,很多人同时去访问某个web文档,
将缓存放在距离数千万公里远的美国,,就算以光速计算,也有15ms延迟,如果某个页面有20个图片,那么就有240ms延迟,如果是在国内要去美国服务器下载,距离6700英里,延时就会有600ms,中等页面,会有多达6s延迟,如果内容没有变化,就返回304Not Modified进行响应。
http/1.0的expires首部,http/1.1的Cache-Control:max-age响应首部指定过期日期,推荐使用Cache-Control:max-age,
事实证明web就是一个强大的内容发布工具,
它是资源和应用程序之间的粘合剂,应用程序可以通过网关,来处理一些请求,,网关提供一条响应,向数据库发送查询请求,同时,有些网关会自动将HTTP浏览转换成其他协议,这样http客户端就无需了解其他协议了,就能和应用程序进行交互,比如:
https ===> 网关 ===> http
使用web隧道最常见的原因就算要在http中嵌入非HTTP流量,这样就可以穿过防火墙了。 最初开发web隧道,就是为了通过防火墙来传输加密的SSL流量,同时,为了不让隧道被滥用,默认只能为https的端口443打开隧道。
web机器人会在网上游荡,比如图形股票机器人,就会不定期向股票市场发送,HTTP GET,用于得到股票市场信息,或者同于万维网扫荡网络统计信息。再比如购物机器人,会自动扫荡商品。
web爬虫则是一种递归机器人,对web站点进行遍历,所以就叫做爬虫(crawler)或者蜘蛛(spider)。
爬虫被放出去之前,需要一个起始节点,挑选根集合,应该在不同站点的url,这样爬遍的连接才是所有你感兴趣的连接,一般就是a链接吧。 链接的提取以及转化,需要不停的处理html页面,迅速扩张。但是实际过程中,经常遇到的就是循环引用的链接。
记录曾经去过哪是不容易的,如果要爬取世界范围内的web内容,那就要做好访问数十亿URL的准备,记录哪些URL已经访问过了,是很不容易的事情。
数十亿的URL需要具备快速搜索的结构,所以速度很重要,以下是一些有用的经验
可以做一些事情避免重复循环