美文网首页程序员
[转]从地址栏输入URL到页面加载完成发生了什么

[转]从地址栏输入URL到页面加载完成发生了什么

作者: 丶纳凉 | 来源:发表于2017-04-02 20:51 被阅读130次

    1.DNS域名解析
    2.TCP连接
    3.HTTP请求
    4.处理请求返回HTTP响应
    5.页面渲染
    6.关闭连接


    一丶DNS域名解析

    人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是多对一的关系,一个ip地址不一定只对应一个域名,且一个域名只可以对应一个ip地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。


    Paste_Image.png

    二.TCP连接

    三次握手

    TCP三次握手的过程如下:
    客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
    
    服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
    
    客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
    
    三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
    
    Paste_Image.png

    三.HTTP请求

    在确认与服务器建立连接后,便会发送一个HTTP请求,HTTP请求的报文主要包括请求行,请求头,请求正文。

    四.处理请求返回HTTP响应

    服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,主要包括状态码,响应头,响应报文三个部分。
    状态码主要包括以下部分
    1xx:指示信息–表示请求已接收,继续处理。
    2xx:成功–表示请求已被成功接收、理解、接受。
    3xx:重定向–要完成请求必须进行更进一步的操作。
    4xx:客户端错误–请求有语法错误或请求无法实现。
    5xx:服务器端错误–服务器未能实现合法的请求。

    五.页面渲染

    页面DOM树的渲染是个复杂的过程,需要深入了解DOM原理;

    HTML DOM是HTML Document Object Model(文档对象模型)的缩写,HTML DOM则是专门适用于HTML/XHTML的文档对象模型。熟悉软件开发的人员可以将HTML DOM理解为网页的API。它将网页中的各个元素都看作一个个对象,从而使网页中的元素也可以被计算机语言获取或者编辑。 例如Javascript就可以利用HTML DOM动态地修改网页。

    六.关闭连接

    TCP四次挥手
    (1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
    (2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
    注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
    (3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
    (4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
    既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。
    注意:
    (1) “通常”是指,某些情况下,步骤1的FIN随数据一起发送,另外,步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。
    (2) 在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭”(half-close)。
    (3) 当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FIN。
    无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,但是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。


    Paste_Image.png

    七丶参考:

    百度百科
    http://baike.baidu.com/link?url=a24cQl6G9w_s-zbkQx604FogX-WWe6ChprNXrwKYgnUB7zs9xsjO5QnYWKpSE4N8cxXI_Qd37HySqZFENYt3lRW5teM4i5vW97FW5uKXVZi

    相关文章

      网友评论

        本文标题:[转]从地址栏输入URL到页面加载完成发生了什么

        本文链接:https://www.haomeiwen.com/subject/yragottx.html