HTTP请求过程

Posted allmdzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于HTTP请求过程的主要内容,如果未能解决你的问题,请参考以下文章

HTTP请求过程

一次完整的 HTTP 请求过程

一次完整的 HTTP 请求过程

Web开发基础HTTP协议的通信过程与请求/响应报文

HTTP -- HTTP相关协议(TCP/IPDNSURI/URLHTTPS)HTTP请求响应过程HTTP报文分析(请求方法URL)HTTP标头

HTTP -- HTTP相关协议(TCP/IPDNSURI/URLHTTPS)HTTP请求响应过程HTTP报文分析(请求方法URL)HTTP标头