首页 > 代码库 > http知识填坑

http知识填坑

当我们输入网址回车或者刷新页面时,浏览器和计算机做了什么事呢?

首先就是域名解析,1.浏览器先搜索自身的DNS缓存

2.若浏览器没有找到缓存或者缓存已经失效,那么计算机搜索自身的DNS缓存

3.读取本地的HOST文件

4.浏览器发起一个DNS的一个系统调用

宽带运营商服务器查看本身缓存

运营商服务器发起一个迭代DNS解析的请求

运营商服务器把结果返回操作系统内核同时缓存起来

操作系统内核把结果返回浏览器

浏览器就拿到了www.xxxxxx.com的ip地址了

5.浏览器获得域名对应的ip地址后,发起HTTP经典的“三次握手”

6.TCP/IP链接建立起来后,浏览器就可以向服务器发生HTTP请求了

7.服务器端接受到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的结果数据返回给浏览器,比如页面完整的html代码返回给浏览器

8.浏览器拿到了完整的html代码后,在解析和渲染这个页面时,里面js,css,图片静态资源,他们同样也是一个个http请求,都要经过上面七个步骤

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

而对于三次握手的解释是这样的:

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,有6种标示:

SYN(synchronous建立联机)

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束)

RST(reset重置)

URG(urgent紧急)

Sequence number(顺序号码)

Acknowledge number(确认号码)

客户端TCP状态迁移:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服务器TCP状态迁移:
CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

 

各个状态的意义如下:
LISTEN - 侦听来自远方TCP端口的连接请求;
SYN-SENT -在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求;
CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
CLOSING -等待远程TCP对连接中断的确认;
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态;

 

TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,

(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

http协议可以粗暴的分为请求和响应,请求和响应都会发送http头和正文信息。http头发送的是一些附加的信息:内容类型,服务器发送响应的日期,http状态码。正文的话就是表单的数据和返回的数据

http知识填坑