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状态码。正文的话就是表单的数据和返回的数据