web 是万维网(World Wide Web)的俗称,是一个框架体系,将分布在全球互联网上的数百万台设备连接起来,供我们访问内容。
Web 内容与超文本链接
Web 由大量分布在全球范围的内容组成,这些内容以网页的形式呈现。每个页面可以包含指向其他页面的链接,这些页面可以分布在全球任何地方。
用户单击一个链接就可以访问到它指向的页面,这个过程可以无限重复下去。一个页面指向另一个页面的概念称为「超文本」。
通常观看页面的程序称为「浏览器」,浏览器取回所请求的页面,对页面内容进行解析,并以适当的格式显示在屏幕上。页面内容本身可能是文本、图像、视频的混合体,用户通过这个界面与网页进行交互。
HTTP 协议与页面抓取
客户端上的浏览器显示一个网页,每个页面的抓取都是通过发送一个请求到一个或多个服务器,服务器以页面的内容作为响应。
抓取网页所用的「请求 - 响应」协议是一个简单的基于文本的协议,运行在 TCP 之上,这个协议就是超文本传输协议 HTTP,内容可能只是一个磁盘读取一个文档,或者是说数据库查询。
如果每次显示的是相同的文档,那这个网页称为静态页面,如果每次显示的程序是按需产生的内容或者页面本身包含一个程序,这个网页称为动态页面。
每个页面被分配一个统一的资源定位符「URL」,用来有效地充当该页面在全球范围内的名字。
服务器响应与页面处理
一旦服务器的 IP 地址已知,浏览器会与该服务器的 80 端口建立 TCP 连接,然后发送一条命令,其中包括 URL 的剩余部分和服务器上某个页面的路径,最后服务器返回该页面供浏览器显示。
- 接受来自客户端浏览器的 TCP 链接;
- 获取页面的路径,也就是被请求文件的名字;
- 从磁盘上获取文件;
- 将文件内容发送给客户端;
- 释放这个 TCP 连接。
处理模块首先检查缓存,查看是否有所需文件。如果缓存中存在该文件,则在记录中增加指向该文件的指针,并将文件返回给客户端;
如果缓存中没有该文件,则执行一次磁盘操作,将文件读入缓存。读取完文件后,将其放入缓存并发送给客户端。
最后我们通过一个例子来阐述下都做了什么:
例子:
www.cs.washington.edu/index.html
这个 URL 由三部分组成:
协议「http」
路径名「index.html」
当用户访问这个链接时,浏览器执行一系列的步骤来获取这个链接所指向的网页。
- 浏览器确定 URL;
- 浏览器请求 DNS 查询服务器 www.cs.washington.edu 的 IP 地址;
- DNS 返回 128.208.3.88;
- 浏览器与 128.208.3.88 机器 80 端口建立一个 TCP 链接;
- 浏览器发送 HTTP 报文,请求 /index.html 页面;
- www.cs.washington.edu 服务器返回页面内容作为 HTTP 响应;
- 如果该页面包括其他 URL,那么浏览器经过同样的处理过程,获取其他的 URL 内容,增显示到网页上;
- 浏览器显示 /index.html 内容;
- 如果短期内没有向同一个服务器发出其他的请求,那么释放 TCP 链接;
内容来源:《计算机网络》
如果您对本篇文章中提到的问题有任何疑问或想法,请在评论区留言,我将尽力回复。
微信公众号「小道研究」,获取更多关于前端技术的深入分析和实践经验