We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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需要具备快速搜索的结构,所以速度很重要,以下是一些有用的经验
可以做一些事情避免重复循环
The text was updated successfully, but these errors were encountered:
plh97
No branches or pull requests
前面太长了,开新坑
4.第四章 连接管理
HTTP规范对HTTP报文解释的清清楚楚,但对HTTP连接介绍的并不多,HTTP连接时关键通道,
下面这一章节,你能了解到如下内容:
4.1 TCP连接,世界上几乎所有的HTTP通讯都是由TCP/IP承载的,TCP/IP是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集,客户端应用程序可以打开一条TCP/IP连接,连接到可能运行在世界任何地方的服务器应用程序,一旦连接建立起来,在客户端和服务器之间交换的报文就永不丢失。
当浏览器受到一个URL的时候,会做如下事情:
4.1.2 TCP流是分段的,由IP组成分组传送
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控制标记,以及一些用于数据排序和完整性检查的一些数字值,
4.1.3保持TCP连接持续不断地运行
在任意时刻,计算机都有几条TCP连接处于打开状态,TCP是通过端口号来保持这些连接持续不断的运行下去。
端口号和雇员使用的电话分机号很类似,tcp连接通过4个属性来连接
<源ip地址,端口号,目的ip,目的端口号>
上面4个唯一值定义了一条唯一连接。两条不同的tcp不能拥有4个完全相同的地址组件值(但是不同的连接的部分组件可以拥有相同的值)。
4.2 对TCP性能的考虑
HTTP紧接着TCP,位于其上层,所以HTTP事物的性能,很大程度上取决于底层TCP性能。
4.2.1 HTTP事物的时延
HTTP事物的演示主要有以下几点原因
4.2.2 性能聚焦区域
4.2.3 TCP握手连接握手延时
TCP握手如下步骤
最终结果是,小的HTTP事物可能会在TCP连接上花费50%,
4.3.2串行事物处理延时
如果只对连接进行简单的管理,TCP的性能时延会可能叠加,比如某个页面,htm文件,另外三个图片url,如果每个事物都需要一条新的http请求,这个时候如果是串行,通过以下方法提高连接速度
通过多条TCP连接并发的HTTP请求。
重用tcp连接,以消除相关的延时。
通过共享的TCP连接发起并发的HTTP请求
交替传送请求和响应的报文
4.4 并行的连接
并行连接肯定很快,但是不可能总是最快,因为这个涉及到一个带宽的问题。
4.5 持久链接
初始化之后,可能会陆续发起其他请求,这个时候就好触发持久链接,在事物处理完成之后,连接依然保持,这种就是持久连接,持久于并行连接一起用,会是一种最好的方式,持久连接就是keep-alive。
http1.1逐渐停止了对Keep-alive的连接支持,,用一种持久连接来替代它。(persistent connection)的改进设计取代它,持久连接的目的于keep-alive连接的目的相同,但是机制更加优先。
浏览器默认除非收到一条Connection: close首部,不如,http连接依然处于连接状态。
持久链接的限制和规则,
4.6 管道化连接
持久连接的基础上才能使用管道连接,当你发送第一条连接的时候,还没有返回,第二条也开始发送,这就是管道连接。管道化连接使用原则:
第五章 web服务器
实际上web服务器到底做了什么,
第一步-----打开客户端连接
如果客户端已经打开一条服务器持久连接,可以使用那条连接来发送请求,否则,打开一条新的到服务器的连接。
第二步-----接受请求报文
连接上有数据的时候,
第七章,缓存
当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就是一个强大的内容发布工具,
8.1 网关
它是资源和应用程序之间的粘合剂,应用程序可以通过网关,来处理一些请求,,网关提供一条响应,向数据库发送查询请求,同时,有些网关会自动将HTTP浏览转换成其他协议,这样http客户端就无需了解其他协议了,就能和应用程序进行交互,比如:
8.5 隧道
使用web隧道最常见的原因就算要在http中嵌入非HTTP流量,这样就可以穿过防火墙了。
最初开发web隧道,就是为了通过防火墙来传输加密的SSL流量,同时,为了不让隧道被滥用,默认只能为https的端口443打开隧道。
第九章 web机器人
web机器人会在网上游荡,比如图形股票机器人,就会不定期向股票市场发送,HTTP GET,用于得到股票市场信息,或者同于万维网扫荡网络统计信息。再比如购物机器人,会自动扫荡商品。
web爬虫则是一种递归机器人,对web站点进行遍历,所以就叫做爬虫(crawler)或者蜘蛛(spider)。
9.1.1 从哪开始
爬虫被放出去之前,需要一个起始节点,挑选根集合,应该在不同站点的url,这样爬遍的连接才是所有你感兴趣的连接,一般就是a链接吧。
链接的提取以及转化,需要不停的处理html页面,迅速扩张。但是实际过程中,经常遇到的就是循环引用的链接。
9.1.5 面包屑留下的痕迹
记录曾经去过哪是不容易的,如果要爬取世界范围内的web内容,那就要做好访问数十亿URL的准备,记录哪些URL已经访问过了,是很不容易的事情。
数十亿的URL需要具备快速搜索的结构,所以速度很重要,以下是一些有用的经验
复杂的机器人可能会用到搜索树或者散列表来标记已访问的URL,这是加速URL查找的软件数据结构
为了减小空间,,使用有损数据结构,比如存在位数组,用一个散列函数,将每个URL都转化成一个定长的数字,爬过一个URL时候,就认为已经爬过了,
一定要将已反问的URL列表保存在硬盘中,以防机器人崩溃。
集群爬取数据。因为单台机器会崩溃
9.1.7 规范化URL
9.1.10 避免循环 和重复
可以做一些事情避免重复循环
好吧,后面的真的没法看,就看到第四章就打止吧。
The text was updated successfully, but these errors were encountered: