浏览器访问网页的底层技术细节

用一个例子来说明。以下基本译自2015年6月新出的那本爬虫书《Web Scraping With Python》,略作改动。

-------------------------------------------------------------------------------------------------------------------

如来佛有一个web服务器,服务器上每天都会更新一篇博客。唐三藏有一台笔记本电脑,正要连接到如来佛的服务器,以阅读最新的博文。当一台机器(唐三藏的笔记本)想要与另一台机器(如来佛的服务器)交流信息的时候,会经过如下流程:

  1. 唐三藏的笔记本电脑发送一串由1和0组成的比特位,在传输线路上表示为高电压/低电压。这些比特位共同形成了某种信息,即头部(header)主体(body)。头部包含了一个指向(唐三藏的电脑所在网络的)本地路由器MAC地址的立即目的地(immediate destination),以及一个指向如来佛服务器的IP地址的最终目的地(final destination)。主体包含了唐三藏对如来佛的服务器应用程序的请求信息。
  2. 唐三藏的本地路由器(local router)收到了1和0组成的串,并把它们视为一个数据包(packet),始发地是唐三藏的MAC地址,目的地是如来佛的IP地址。路由器将它自己的IP地址作为“始发”IP地址加入到这个数据包中,再将这个数据包通过Internet发送出去。
  3. 唐三藏的数据包经过多个中间服务器(intermediary servers),这些服务器都会将他的数据包沿着正确的网络通路投递,直到抵达如来佛的服务器。
  4. 如来佛的服务器收到了这个指向他的IP地址的数据包。
  5. 如来佛的服务器从这个数据包的头部中读取目的端口号(对于网站应用来说通常是80端口。我们可以把端口号理解为数据包的“门牌号”,而IP地址则相当于“街道地址”),然后把这个数据包传递给相应的应用程序——web服务器应用程序
  6. web服务器应用程序从服务器的处理器那里接收到一串数据。这数据会显示类似于下面的信息:
    • 这是一个GET请求
    • 请求的文件是:index.html
  7. web服务器找到了正确的HTML文件,把它打包成一个发送给唐三藏的新的数据包,并且通过(如来的web服务器所在网络的)本地路由器,回传到唐三藏的笔记本电脑。回传的流程与以上相同。