面试中被问到:当在浏览器中输入一个url后回车,后台发生了什么?
第一步是通过访问的域名找出其IP地址。DNS查找过程如下:
1.浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
2.系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
3.路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
4.ISP DNS 缓存+递归搜索,详细如下:
- 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
- 当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
- 如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
- 本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
- 重复第四步,直到找到正确的纪录。
具体步骤如下:
1.HTTP客户初始化一个与服务器主机www.yesky.com中的HTTP服务器的TCP连接。HTTP服务器使用默认端口号80监听来自HTTP客户的连接建立请求。这里面包括TCP三次握手神马的(HTTP是建立在TCP/IP上的),涉及到socket通信的种种过程。
2.HTTP客户经由与TCP连接相关联的本地套接字发出—个HTTP请求消息。这个消息中包含路径名/somepath/index.html。
3.HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息,再从服务器主机的内存或硬盘中取出对象/somepath/index.html,经由同一个套接字发出包含该对象的响应消息(MVC模型)。
4.HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接,四次挥手的前两次挥手)。
5.HTP客户经由同一个套接字接收这个响应消息。TCP连接随后终止(四次挥手的后两次挥手)。该消息标明所封装的对象是一个HTML文件。客户从中取出这个文件,加以分析后发现其中有10个JPEG对象的引用。
6.给每一个引用到的JPEG对象重复步骡1-4。
只是简单一总结,应付面试,大神的叙述更详尽,参考:
http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html