• HTTP请求过程


    概览:DNS解析--TCP三次握手连接--浏览器请求--服务端接收请求,并回复HTML代码给客户端--客户端收到代码根据代码继续请求CSS/JAVASCRIPTS--客户端拿到资源,浏览器开始渲染

    第一步:用户输入域名在浏览器,浏览器查找缓存,再查找PC缓存,再递归查找DNS服务器,DNS服务器迭代查找根服务器

                   递归即我向你发出查找请求,你必须找到资源并答复我,迭代是指我向你请求,你不知道,我再向上级查找

    第二步:通过第一步拿到IP地址后,两端TCP/IP协议会通过TCP三次握手建立可靠的连接通道,即客户端发送SYN=1,ACK=0,SEQ=X,其中SYN=1表示这个报文是请求连接/答复连接的报文

                  ACK=0,表示双方还未建立连接,没有发生数据交流,未需向对方确认收到的数据,SEQ=X表示请求方发送的数据流的初始值,对端答复报文的ACK就是对SEQ数据的确认

                  服务端答复报文SYN=1,ACK=X+1,SEQ=Y,ACK=X+1表示期望下次收到的数据流的位置点,并确认了收到对端数据流的位置点

                  注意:TCP连接是双向的,两个通道,且有动态接收窗口来限制数据传输快慢,且有各种标志号的报文对数据传输过程做控制,比如重传,紧急回复等

                             TCP把应用层数据变成数据流方式传输,跟动态发送窗口一起控制发送速率

    第三步:三次握手后,浏览器发送报文,method/url/version,头部信息,请求主体等组成,method即为方法,常见有GET/POST,version为HTTP协议版本号,现为1.1

                  头部信息为补充,数据类型是键值对,比如host:www.baidu.com,请求主体,当方法为POST客户端会提交表单数据上去服务端

    第四步:服务端收到报文,查看请求头部的信息,查找资源,如果有且能访问,返回答复报文,也包括method/url/version,头部信息,内容主体,

                  若资源为静态,那么直接把html代码返回给客户端,客户端根据代码再请求CSS/JS等内容,

                  若为动态资源,那么已PHP为例,通过请求头部信息以.php结尾的地址,nginx就会启动fastcgi把请求内容交给fastcgi程序处理,PHP解析代码,当需要跟数据库交互数据就会取数据库取数据

                  取完数据并且跟模板生成html代码发送给客户端

                  注:nginx取.php页面是通过用户态转换成内核态,由内核态去调用硬件资源,即磁盘文件,在磁盘拿到文件会放在内存中

                  注:在LINUX的ext3/4文件系统中,会划分inode与block,其中inode记录文件的属性,权限,时间与block号码的信息,block存放文件的真正数据

                         目录一般占用一个block,只起到保存目录下文件所在的inode号码,所以,查找index.php的时候,是先通过/的inode查到block,并从block得知index.php文件的inode,

                         再从文件的inode得知block的号码,最后取得数据。

                 拓展:当创建文件时,从inodemap取号码,从blockmap取号码,若划分了inode,block给了文件,但是由于系统断电,没来得及把数据写入block,那么会造成浪费,且文件空有名字却无数据

                            这时需要日志功能,未完待续

    第五步:浏览器解析代码,并请求CSS/JS

    第六步:浏览器引擎渲染页面并呈现给用户

    详细参考资源:https://blog.51cto.com/linux5588/1351007

                             http://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html

  • 相关阅读:
    We7 2.7版:全拖拽建站 开源CMS
    We7 CMS 2.6RC2版本发布 开源CMS
    LINQ简易教程
    C# 引用 C# DLL
    ASP.NET中母版页与JavaScript控制的一点小问题
    LINQ连接远端数据库问题
    ASP.NET中自动生成XML文件并通过XSLT显示在网页中的方法
    【转载】常见逻辑错误
    因为压力大变得很郁闷的时候怎么办
    代码覆盖度C#代码监控工具NCover、Rational PureCoverage、BullseyeCoverage
  • 原文地址:https://www.cnblogs.com/allmdzz/p/10642804.html
Copyright © 2020-2023  润新知