url从浏览器输入到页面呈现

Posted by Daisydan on March 8, 2016

url从浏览器输入到页面呈现

前段时间有人问我“从输入URL到页面加载完成的过程中都发生了什么”,当时脑袋里的碎片零零散散,就是不知道怎样完整的回答,今天刚好有时间把它给好好整理整理。

主要的流程

DNS解析-->建立连接,发送数据包 -->服务器响应请求,返回给浏览器-->浏览器渲染程序页面。
  • DNS解析 首先在浏览器输入了一个URL地址,但URL中服务器地址是一个域名而不是一个指定的IP地址,路由器并不知道你想要查找的地址,那么DNS域名解析系统会将该域名解析成ip,而IP地址是唯一的, 每一个ip地址对应网络上的一台计算机。

  • 建立网络连接,发送数据包 由于以上的努力,已经能够根据ip和端口号与网络上对应的服务器建立连接,浏览器这边会向服务器发送一个数据包,里面包含了大量的信息,但这个数据包有一定的格式。就像我给你邮个快递,也得遵循邮递公司的一些规则吧!我得写上我的身份信息、寄的物品、标明邮递地址….道理是一样的,到了网络中这些规则就是“Http协议(网络协议)” http协议是客户端和服务器端两者通信共同遵循的一些规则。主要内容是定义了客户端如何向服务器请求资源,服务器如何响应客户端请求。

    请求中的POST与 GET方法有什么区别? 1.根据HTTP规范,GET用于信息获取,而且应该是安全的,这里的安全是指非修改的信息,就像在数据库执行查询一样,不会修改数据,也不会增加删减数据,不会影响资源的状态,而post可能会改变数据的原始状态。 2.GET提交的数据最多只有1024字节,理论上POST是没有限制的。 3.从请求的URL中可以找到一个区别:GET请求的数据会附在URL之后,在浏览器URL栏就能看的。似乎POST比GET更可靠一些,因为它请求把提交的数据放在包体中,地址栏上不可见。(也有的解释说两者都没有长度限制,根本的区别就是一个是获取数据,一个修改数据!)

  • 服务器响应请求,返回给浏览器 服务器会分解你的数据包,例如你查找的是一个文档,那么服务器可能会返回一个doc文档或者zip压缩资源给你;如果你访问的是一个链接页面,那么服务器相应的返回一个包含HTML/CSS标记文档,这些请求和响应都有一个通用的写法,这些规则也就是前面提到的”http协议”。 客户端向服务器请求资源时,除了告诉服务器要请求的资源,同时还会附带一些其他的信息,这部分信息放在”header”部分(服务器响应请求也一样!),主要有请求头(略)和响应头

    200 OK 一切正常,对GET和POST请求的应答文档跟在后面。 201 Created 服务器已经创建了文档,Location头给出了它的URL。 202 Accepted 已经接受请求,但处理尚未完成。

    300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。 301 Moved Permanently 永久重定向。 302 Found 临时重定向 304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求。服务器告 诉客户,原来缓冲的文档还可以继续使用。

    400 Bad Request 请求出现语法错误。 403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。 404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。 405 Method Not Allowed 请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新)

    500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。

  • 客户端渲染 渲染引擎得到html字符串作为输入,然后对html进行转换,转化成能够被DOM处理的形式,接着转换成一个dom树,在解析html的过程,解析到link、script、img等一些请求标签时,会发送请求把对应的内容获取到。这时又会同步进行css的解析,构建出css样式规则应用到dom树上,然后进行一定的布局处理,比如标记节点块在浏览器中的坐标等形成最终的渲染树,最后根据这棵渲染树在浏览器窗口中进行绘制。 View