发送一个url请求到页面渲染完成经历的流程

访问顺序

1.在浏览器输入url(应用层)
2.DNS域名解析(应用层)
3.TCP建立连接 (传输层)
4.浏览器向服务器发送http请求 (应用层)
5.服务器接收请求
6.页面渲染

一:在浏览器输入网址(url)

在浏览器地址栏输入网址

二:域名解析

DNS解析:域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。解析后可以获取域名相应的IP地址
DNS解析过程:
1. 先去本地hosts文件中读取对应ip映射,如果找到跳到第3步
2. 如果没有,则向外部的DNS服务器查询
3. 通过ip地址,发出请求
在这里插入图片描述

三:TCP建立连接

TCP协议是面向连接的,所以在传输数据前必须建立连接

TCP三次握手过程:
1.客户端向服务器发送请求连接报文(SYN, seq=x)
2.服务器收到请求连接报文后,向客户端发送确认报文(SYN+ACK,seq=y,ack=x+1),服务器并为这次连接分配资源
3.客户端收到确认报文之后,向服务器发送确认报文(ACK,seq=x+1,ack=y+1)
建立tcp连接之后就可以发送数据了。
在这里插入图片描述

四:浏览器向服务器发送http请求

请求信息包括请求头和请求体
在这里插入图片描述

五:服务器接收请求

  1. Http请求被发送到服务器对应端口,被在那里侦听的Coyote HTTP/1.1 Connector获得。
  2. Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应。
  3. Engine匹配到名为localhost的Host
  4. Host匹配到它所拥有的所以Context
  5. Context通过它的 mapping table 找到对应的Servlet类,构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用对应的Servlet类
  6. 执行完请求后再逐层返回,处理后得到的HttpServletResponse对象
六:页面渲染

浏览器收到服务器发送的响应头和响应体,进行客户端渲染,生成Dom树、解析css样式、js交互。


注:

1.持久连接:既然维持 TCP 连接好处这么多,HTTP/1.1 就把 Connection 头写进标准,并且默认开启持久连接,除非请求中写明 Connection: close,那么浏览器和服务器之间是会维持一段时间的 TCP 连接,不会一个请求结束就断掉。

所以第一个问题的答案是:默认情况下建立 TCP 连接不会断开,只有在请求报头中声明 Connection: close 才会在请求完成后关闭连接。
2.一个 TCP 连接是可以发送多个 HTTP 请求的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章