从浏览器输入网址到最终界面展示,这其中主要发生了那些事情。
1.DNS
从地址栏输入网址后,按下回车。浏览器最先要知道的是域名对应的ip,并非每次都要到DNS远程服务器上获取ip,首先会检测本地的hosts文件,如果在hosts文件中找到域名对应的ip地址则进行下一流程。如果没有,浏览器会读取浏览器缓存和系统缓存来查找对应的ip。如果仍然没有找到,才会到 DNS服务器上查询。
查询流程如下:
a.DNS服务器根据查询报文“query www.landingbj.com”首先检查自身缓存,如果存在记录则直接返回结果。
b.如果在缓存中没有找到ip,则
1.DNS服务器向根域名服务器发送查询报文"query www.landingbj.com",根域名服务器返回 .com域的权威域名服务器地址,这一级首先会返回的是顶级域名的权威域名服务器。
2.DNS服务器向 .com 域的权威域名服务器发送查询报文"query www.landingbj.com",得到 landingbj.com域的权威域名服务器地址。
3.DNS服务器向 .landingbj.com 域的权威域名服务器发送查询报文"query www.landingbj.com",得到主机 www 的记录,存入自身缓存并返回给客户端。
2.HTTP
浏览器与服务器之间通过HTTP协议传输数据
1.首先客户机与服务器需要建立连接。
2.建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3.服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4.客户端接收服务器所返回的信息,然后客户机与服务器断开连接。
3.web container
如果发送的请求需要在服务器端进行逻辑处理并与数据库进行交互,在Java EE的领域就会涉及到JSP与servlet。如果浏览器访问JSP文件,执行流程如下:
1.检查所请求的这个JSP 文件内容 ( 代码 ) 是否已经被更新,或者是否是 JSP 文件创建后的第一次被访问,如果是,这个 JSP 文件就会在web container中的 JSP 引擎作用下转化为一个 Servlet 类的 Java 源代码文件。如果不是,则直接执行此JSP文件与之对应的servlet。
2.Servlet 容器装载和实例化一个 Servlet,创建出该 Servlet 类的一个实例。
3.在 Servlet 实例化完成之后,容器负责调用该 Servlet 实例的 init() 方法,在处理用户请求之前,来做一些额外的初始化工作。
4.当 Servlet 容器接收到一个 Servlet 请求时,便运行与之对应的 Servlet 实例的 service() 方法,service() 方法再派遣运行与请求相对应的 doXX(doGet,doPost) 方法来处理用户请求。
5.当 Servlet 容器决定将一个 Servlet 从服务器中移除时 ( 如 Servlet 文件被更新 ),便调用该 Servlet 实例的 destroy() 方法,在销毁该 Servlet 实例之前,来做一些其他的工作。
经过web container的处理之后,返回给浏览器端的数据由浏览器解析并进行界面展示。浏览器可以理解为HTML、javascript、CSS的解释器。
该贴由koei123转至本版2015-2-6 4:58:23