HTTP工作流程

来源:互联网 发布:windows好用的v翻墙 编辑:程序博客网 时间:2024/06/05 15:10

大致流程是:

1. 由http客户端发起一个请求,创建一个到服务器指定端口(一般是80端口)的tcp连接。

2. http服务器就在端口监听客户端的请求。

3. 一旦收到请求,http服务器向客户端返回状态和内容。


详细来看一下http走过的环节:

从输入网址到页面完全渲染,计算机和浏览器做过很多事情,以在chrome浏览器中搜索www.baidu.com为例。

第一步:域名解析(将域名解析为IP地址)。(如果找到相应的缓存则停止搜索,域名解析到此结束)

1. chrome搜索自身的DNS缓存。 //这个缓存的时间大概有一分钟 chrome://net-internals/#dns

2. 搜索操作系统自身的DNS缓存。(如果浏览器自身的DNS缓存不存在或已经失效)

3. 读取本地的HOST文件。(如果操作系统自身的DNS缓存没有找到)

4. 浏览器发起一个DNS的一个系统调用。即是向本地DNS主控服务器(一般是你的宽带运营商提供的)发起一个域名解析请求。(如果本地HOST中没有找到相应的配置项)

这个过程有分为几步:

(1)宽带运营商服务器查找自身缓存。如果找到对应的条目,并且也没有过期,那么解析也就成功了。

(2)运营商服务器代替浏览器发起一个迭代的DNS解析请求。(如果运营商服务器在自身的DNS缓存中没有找到有效的DNS缓存)

什么是迭代的DNS解析请求呢?首先运营商服务器会到根域的DNS服务器查找baidu.com的IP地址,在这里找到了com域的IP地址,然后又到com域的DNS服务器查找baidu.com的IP地址,在这里找到baidu.com域的IP地址,然后又到baidu.com域的DNS服务器里找到了www.baidu.com的ip地址(由域名注册商提供)。

运营商DNS服务器将拿到的结果返回给操作系统内核同时也缓存在了自己的缓存区。

操作系统内核然后将结果返回给了浏览器。

最终浏览器拿到了www.baidu.com对应的IP地址。

第二步:建立TCP/IP连接(即客户端与请求的URL地址取得连接)

XMLHttpRequest对象通过open方法打开与请求URL地址的连接

5. 浏览器获得域名对应的IP地址后,就发起http“三次握手”,建立起TCP/IP连接。

浏览器就会以一个随机端口向服务器的web程序发起一个TCP连接请求,这个连接请求通过层层的路由设备到达了服务器端以后,进入到网卡,然后进入到内核的TCP/IP协议栈,还可能要经过防火墙的过滤,最终达到了web服务端。然后就建立起了这个TCP/IP的连接。

具体这三次握手干了啥事?

第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

第三步:发送HTTP请求

XMLHttpRequest对象通过send方法发送请求

6. TCP/IP连接建立起来后,浏览器就可以向服务器发送一个HTTP请求了。例如用http的GET方法请求一个根域里的一个域名,协议可以使用HTTP 1.0 。

第四步:服务器端处理请求并返回响应

7. 服务器端接收到请求,根据路径参数,经过后端的一些处理,然后把处理后的一个结果数据返回给浏览器。如果请求的是百度的页面,就会把完整的HTML页面代码返回给浏览器。

8. 浏览器在拿到该网页完整的HTML代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,它们同样也是一个个HTTP请求,都需要经过上面主要的七个步骤。

9. 浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。


视频资源参考http://www.imooc.com/learn/348





0 0