当你输入一个网址会发生什么?

写在前面:

    这是一道经常会被面试官问到的面试题,这篇博客,我们以www.baidu.com为例,总结当我们输入www.baidu.com,按下Enter之后,到显示Html网页,这个过程会发生什么?

英文原文连接:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/


(1)查找域名对应的IP地址

    浏览器会缓存记录DNS一段时间,注意,操作系统没有告诉浏览器记录这个缓存多长时间,根据浏览器的不同会存储各自不同的时间(2分钟-20分钟)。

    系统缓存:如果在浏览器缓存中没有找到DNS,浏览器会做一个系统调用,以获取系统中的缓存记录。

    路由器缓存:接下来,请求会转发向路由器,一般,路由器会有自己的缓存。

    ISP缓存:接下来要查找的是ISP缓存。在这里,一般都会找到DNS缓存记录。

    递归搜索:ISP的DNS服务器开始进行递归搜索,从.com顶级域名服务器到baidu的域名服务器。

(2)应用层-浏览器给Web服务器发送一个Http请求

    请求头为:GET http://www.baidu.com/HTTP/1.1

(3)传输层-HTTP数据包会嵌入到TCP报文中

    TCP报文段需要设置端口,接收方(即baidu)的HTTP端口默认是80,本机的端口是1024-65535之间的一个随机整数。这样TCP报文段由TCP首部(发送方接收方的端口信息)+HTTP数据包组成。

(4)网络层-TCP报文段嵌入IP数据包中

    IP报文段由IP首部(发送方接收方的IP地址信息)+TCP数据包组成。

(5)网络接口层-IP数据包嵌入到帧中,在网络中传输

    数据帧中包含了由ARP地址解析协议得到的目的MAC地址和源MAC地址。帧=帧头部+IP数据包

(6)网关转发到达百度服务器,请求对应端口的服务

    服务器接收到发送来的以太网数据包,开始解析,提取IP数据包->TCP数据包->HTTP数据包。过程中,生成request和response对象。

(7)服务器返回一个HTTP响应

    Web服务器软件会接收到Http请求后,会决定采取哪一种“请求处理”(request handler),来处理这个请求。“请求处理”即是一个可以读懂用户请求,并且生成一个html来进行响应的应用程序。然后,“请求处理”会阅读请求,参数以及cookies。并将数据存储在服务器上。

    处理完毕后,数据通过response对象向客户端输出信息。并断开连接,释放request,response对象。

    响应头为:HTTP/1.1200 OK

(8)浏览器以相同的步骤,读取HTTP响应的内容

    浏览器对接收到的HTTP响应进行解析,去掉对应头信息,形成也可以被浏览器认识的页面HTML字符串信息,交与浏览器翻译为对应页面规则信息展示为页面内容,向用户显示。


    

    

你可能感兴趣的:(Java笔试总结)