码迷,mamicode.com
首页 > Web开发 > 详细

HTTP请求过程

时间:2019-04-02 15:32:05      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:url   头部   迭代   javascrip   三次握手   www.   blog   dns解析   日志   

概览: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

 

HTTP请求过程

标签:url   头部   迭代   javascrip   三次握手   www.   blog   dns解析   日志   

原文地址:https://www.cnblogs.com/allmdzz/p/10642804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!