1. 服务器应答过程:
1.1 输入网址:
当你开始输入网址比如www.cnblogs.com时浏览器就可以在书签或者历史记录里面
去搜索相关的网址推荐给你。
1.2 浏览器查找域名的IP地址:
1.2.1 请求发起后,浏览器首先会解析这个域名,首先它会查看本地硬盘的 hosts 文
件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件
里面的 ip 地址。
1.2.2 如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个
DNS请求到本地DNS(域名分布系统)服务器 。本地DNS服务器一般都是你的网络
接入服务器商提供,比如中国电信,中国移动。
1.2.3 查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会
首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程
是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查
询。
1.2.4 根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服
务器,你可以到域服务器上去继续查询,并给出域服务器的地址。这种过程是迭
代的过程。
1.2.5 本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象
是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的
对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
1.2.6 最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名
和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这
个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快
网络访问。
1.3 建立TCP链接
在拿到域名对应的IP地址后,会以随机端口(1024~65535)向WEB服务器程序80
端口发起TCP的连接请求,这个连接请求进入到内核的TCP/IP协议栈(用于识别该
连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核
的模块)的过滤,最终到达WEB程序,最终通过三次握手建立了TCP/IP的连接。
1.4 浏览器向WEB服务器发起Http请求
建立TCP连接之后,发起HTTP请求,请求一般分为三部分
请求方法URI协议/版本
请求头(Request Header)
请求正文
1.5 服务器端处理
服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求,诸如
Apache、Ngnix、IIS等。web服务器解析用户请求,知道了需要调度哪些资源文
件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将
结果通过web服务器返回给浏览器客户端。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bc453f47078c2a9aa6e107b4696c2f5c.png)
1.6 关闭TCP链接
为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,
任意一方都可以发起关闭请求。与创建TCP连接的3次握手类似,关闭TCP连接,需
要4次握手。
1.7 浏览器解析资源
对于获取到的HTML、CSS、JS、图片等等资源。浏览器通过解析HTML,生成
DOM树,解析CSS,生成CSS规则树,然后通过DOM树和CSS规则树生成渲染
树。渲染树与DOM树不同,渲染树中并没有head、display为none等不必显示的节
点。在解析CSS的同时,可以继续加载解析HTML,但在解析执行JS脚本时,会停
止解析后续HTML,这就会出现阻塞问题。
1.8 浏览器布局渲染
根据渲染树布局,计算CSS样式,即每个节点在页面中的大小和位置等几何信息。
2. 常见相应码:
2.1 1xx(临时响应)
100:请求者应当继续提出请求。
101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备进行切换。
2.2 2xx(成功)
200:正确的请求返回正确的结果,如果不想细分正确的请求结果都可以直接返回
200。
201:表示资源被正确的创建。比如说,我们 POST 用户名、密码正确创建了一个
用户就可以返回 201。
202:请求是正确的,但是结果正在处理中,这时候客户端可以通过轮询等机制继续
请求。
203:请求的代理服务器修改了源服务器返回的 200 中的内容,我们通过代理服务
器向服务器 A 请求用户信息,服务器 A 正常响应,但代理服务器命中了缓存并返回
了自己的缓存内容,这时候它返回 203 告诉我们这部分信息不一定是最新的,我们
可以自行判断并处理。
2.3 3xx(已重定向)
300:请求成功,但结果有多种选择。
301:请求成功,但是资源被永久转移。比如说,我们下载的东西不在这个地址需要
去到新的地址。
303:使用 GET 来访问新的地址来获取资源。
304:请求的资源并没有被修改过。
308:使用原有的地址请求方式来通过新地址获取资源。
2.4 4xx(请求错误)
400:请求出现错误,比如请求头不对等。
401:没有提供认证信息。请求的时候没有带上 Token 等。
402:为以后需要所保留的状态码。
403:请求的资源不允许访问。就是说没有权限。
404:请求的内容不存在。
406:请求的资源并不符合要求。
408:客户端请求超时。
413:请求体过大。
415:类型不正确。
416:请求的区间无效。
2.5 5xx(服务器错误)
500:服务器错误。
501:请求还没有被实现。
502:网关错误。
503:服务暂时不可用。服务器正好在更新代码重启。
505:请求的 HTTP 版本不支持。