http请求过程
浏览器地址栏输入域名 --> 域名发送给DNS解析器 --> 根据解析出来的IP地址找到对应的服务器 --> 服务器再根据端口号找到对应的端口下的资源文件 --> 再根据资源路径找到对应的文件 --> 找到之后,服务器再通过网络将资源传输给客户端 --> 客户端接收到资源之后进行渲染 --> 浏览器的渲染机制;
一次完整的HTTP请求过程?
当我们在web浏览器的地址栏中输入: www.baidu.com,然后回车,到底发生了什么 过程概览
- 对www.baidu.com这个网址进行DNS域名解析,得到对应的IP地址
- 根据这个IP,找到对应的服务器,发起TCP的三次握手
- 建立TCP连接后发起HTTP请求
- 服务器响应HTTP请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(如js、css图片等)(先得到html代码,才能去找这些资源)
- 浏览器对页面进行渲染呈现给用户
注:
DNS域名解析采用的是递归查询的方式,过程是,先去找DNS缓存->缓存找不到就去找根域名服务器->根域名又会去找下一级,这样递归查找之后,找到了,给我们的web浏览器- 为什么HTTP协议要基于TCP来实现? TCP是一个端到端的可靠的面相连接的协议,HTTP基于传输层TCP协议不用担心数据传输的各种问题(当发生错误时,会重传)
- 最后一步浏览器是如何对页面进行渲染的? a)解析html文件构成 DOM树,b)解析CSS文件构成渲染树, c)边解析,边渲染 , d)JS 单线程运行,JS有可能修改DOM结构,意味着JS执行完成前,后续所有资源的下载是没有必要的,所以JS是单线程,会阻塞后续资源下载;
http : 是一种超文本传输协议;可以在服务器和浏览器之间不仅可以传输文本,还可以传输图片、音频、视频这些内容;
https : 是一种加密的超文本传输协议,安全性高;经常应用于银行、支付系统、金融;
http是运行在客户端和服务器之间的快递小哥;
三次握手
所谓三次握手即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发;
第一次:客户端发给服务端ACK数据包; 第二次:服务端将发来的数据包进行验证和处理,再次发给客户端; 第三次握手:客户端将传送来数据包验证是否正确,再次把数据包发送给服务端,建立连接;
三次握手建立完成之后:就可以进行数据传输了;TCP连接建立成功;
http请求阶段
1.先把域名和地址发送给DNS解析器,DNS解析器解析出服务器地址
2.DNS找到对应的服务器
3.建立TCP三次握手
http响应阶段
1.根据url上的端口号,找到服务器上的对应的端口;
2.再根据url的路径,找到对应的资源文件
3.把找到的资源文件通过http传输给客户端;
浏览器渲染阶段
1.客户端接收到服务器传递过来的数据;
2.把HTML进行渲染,当遇到link img的src script的src;会再次向服务器发送请求,请求对应的资源;
3.先形成DOM树 -->CSS树 -->render树;
域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户
四次挥手
所谓四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发;
数据传送是双向的;分别从客户端发送到服务器和服务器发送数据到客户端;
- 当客户端数据传送完毕,会发送FIN,告诉服务器数据已经传输完毕
- 当服务器接收到FIN,进行处理,当自己数据接收完毕,也会发送ACK,告诉客户端可以关闭了
- 当服务器数据传送给客户端传输完毕,也会发送FIN,告诉浏览器,收据已经传送完毕,
- 客户端接收完毕,告诉服务器可以关闭传输通道,那么服务器就会把数据通道关闭;