从发送请求到服务器响应至浏览器都发生了什么?

从发送请求到服务器响应至浏览器都发生了什么?

输入网址回车后,浏览器首先要做DNS解析

1.搜索浏览器的DNS缓存
2.搜索操作系统自身的DNS缓存
3.搜索hosts文件
4.通过dns客户端向dns服务器发送解析请求(UDP协议向DNS的53端口)
5.服务器代发起迭代DNS解析请求,首先找根域的DNS的IP地址(内置13个根IP地址)
6.dns服务器得到顶级域名的服务器,发送请求
7.dns服务器得到二级域名的服务器,发送请求…
8.dns服务器得到ip并返回系统内核
9.内核将结果返回给浏览器

确定IP地址后,浏览器会尝试和服务器建立一个tcp连接
1.tcp协议是可靠的传输协议,完善的重传机制和控制机制HTTP协议是搭载在其上的。
2.tcp协议三次握手:TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机,另外a->b,b->a,a没有收到网断了,b以为a收到了发了一大堆数据,超时重传又发造成死锁。而四次是多余的。

如果已经加载过该页面
服务器会返回状态码304让浏览器在自己缓存中查找

这时候如果没加www.
淘宝(taobao‌.‌com)会返回状态码301和302,告诉浏览器临时重定向和永久重定向
百度(baidu‌.‌com)会改变meta中的信息,使页面访问www.···

<meta http-equiv="refresh" content="几秒后跳转至另一界面;url=页面地址" >

这里如果是http协议会···如果https协议会···
http默认端口是80,https默认端口是443。我们默认访问的是80
如果是http1.0在建立连接后马上会断开连接,http1.1有keep-alive属性保活
http如何被强制转换为https?服务器使用http协议并监听80端口,等待浏览器的访问.在监听的80端口上设置url重定向,指向监听端口为443的https协议的网站,其中http协议实现了一个叫做HSTS机制,在时间到期之前所有的http都会被改为https

浏览器最后会通过已建立的tcp连接向服务器发送一个http报文
请求报文的格式 状态行 请求头 空行 请求体
状态行包括 请求方法 URL 协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
请求头包括
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
User-Agent:发送请求的浏览器类型、操作系统等信息
Accept:指定客户端接收那些类型的信息
Accept-Encoding:客户端可识别的数据编码
Accept-Language:表示浏览器所支持的语言类型
Connection:是否保持连接
Transfer-Encoding:报文的编码方式
GET方法无请求体

服务器虽然对外只有一个ip但是内部会有更复杂的结构
1.如果是纯静态资源的网站会通过地理dns技术,使用户映射到不同的服务器
2.否则就可能会用到Reverse Proxy 和LoadBalancer技术。我们是跟Nginx交互,如果是静态资源直接返回,动态则交给Tomcat处理,tomcat将解析好的文件交给Nginx,Nginx再返回用户。

最后HTTP报文达到了Web服务器
服务器根据数据将动态资源解析成html并发送响应报文…

报文格式是
响应报文由四个部分组成,分别是:状态行、响应头、空行、响应正文。
状态行 包括 协议名 状态码 状态码含义
响应头 包括
Location:Location响应报头域用于重定向接受者到一个新的位置
Server:Server 响应报头域包含了服务器用来处理请求的软件信息及其版本
Vary:指示不可缓存的请求头列表
Connection:连接方式close告诉 WEB 服务器或者代理服务器,在完成本次请求的响应后,断开连接keepalive告诉WEB服务器或者代理服务器保持连接
响应包 包括 服务器返回给客户端的文本信息

浏览器拿到HTML后会解析HTML的内容
提取其中跟css和Js有关的相关链接,一边渲染HTML一边下载这些资源。所以我们在没得到所有资源的情况下就已经能看到界面

其中就有可能使用ajax获取其他资源
ajax是异步的java和xml,它可以在不刷新网页的情况下得到我们想要的数据。ajax得到的文件是一个xml我们可以使用js像获取html元素一样得到xml的元素

最后网页就渲染出来了。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页