浏览器有关知识总结--HTTP请求超具体流程

在浏览器中输入域名后会有怎样的HTTP请求流程呢?
1、 构建请求
    浏览器构建请求行信息(GET /index.html HTTP1.1),构建好后,浏览器准备发起网络请求。
2、查找缓存
    在真正发起网络请求之前,浏览器会先在浏览器缓存中查询是否有要请求的文件。当浏览器发现请求的资源已经在浏览器缓存中存有副本,它会拦截请求,返回该资源的副本,并直接结束请求,而不会再去源服务器重新下载。这样做可以缓解服务器端压力,提升性能(获取资源的耗时更短了)。缓存是实现快速资源加载的重要组成部分。如果缓存查找失败,就会进入网络请求过程。
3、准备 IP 地址和端口
    HTTP 协议作为应用层协议,用来封装请求的文本信息;并使用 TCP/IP 作传输层协议将它发到网络上,所以在 HTTP 工作开始之前,浏览器需要通过 TCP 与服务器建立连接。也就是说 HTTP 的内容是通过 TCP 的传输数据阶段来实现的。
    必须先进行三次握手,那么就必须获取IP地址和端口号。所以基于这个需求又出现了一个服务,负责把域名和 IP 地址做一一映射关系。这套域名映射为 IP 的系统就叫做“域名系统”,简称 DNS。浏览器还提供了 DNS 数据缓存服务,如果某个域名已经解析过了,那么浏览器会缓存解析的结果,以供下次查询时直接使用,这样也会减少一次网络请求。
4、等待 TCP 队列
    已经把端口和 IP 地址都准备好了,那么下一步是不是可以建立 TCP 连接了呢?
    答案依然是“不行”。http/1.1 一个tcp同时只能处理一个请求,浏览器会为每个域名维护6个tcp连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态,直至进行中的请求完成。当然,如果当前请求数量少于 6,会直接进入下一步,建立 TCP 连接。直接加载大量图片或者其他资源会导致卡顿,所以通常如图片这种静态资源都是直接配置到cdn上的。http2是可以并行请求资源的,所以如果使用http2,浏览器只会为每个域名维护一个tcp连接。打开了一个域名下的a页面,然后又打开了这个域名的b页面,这个b页面依旧是维持先前那一个tcp长连接,浏览器为用同一个域名只维护一个TCP连接。
    http1.1中的keep-alive是排队请求,也就是一个http请求完成之后才能继续请求下一个,而http2中请求是并发的,可以同时处理很多请求。
5、建立 TCP 连接
6、发送 HTTP 请求

    首先浏览器会向服务器发送请求行,它包括了请求方法、请求 URI(Uniform Resource Identifier)和 HTTP 版本协议。
    在浏览器发送请求行命令之后,还要以请求头形式发送其他一些信息,把浏览器的一些基础信息告诉服务器。比如包含了浏览器所使用的操作系统、浏览器内核等信息,以及当前请求的域名信息、浏览器端的 Cookie 信息,等等。

服务器端处理 HTTP 请求流程
1、返回请求
    首先服务器会返回响应行,包括协议版本和状态码。无法处理或者处理出错的信息会返回对应的状态码类型。
    响应头包含了服务器自身的一些信息,比如服务器生成返回数据的时间、返回的数据类型(JSON、HTML、流媒体等类型),以及服务器要在客户端保存的 Cookie 等信息。发送完响应头后,服务器就可以继续发送响应体的数据,通常,响应体就包含了 HTML 的实际内容。
2、断开连接
    通常情况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接。但如果在浏览器或者服务器头信息加入了Connection:Keep-Alive。TCP 连接在发送后将仍然保持打开状态,这样浏览器就可以继续通过同一个 TCP 连接发送请求。保持 TCP 连接可以省去下次请求时需要建立连接的时间,提升资源加载速度。
3、还有重定向的可能

问题:
为什么很多站点第二次打开速度会很快?
    因为这些网站把很多资源都缓存在了本地,浏览器缓存直接使用本地副本来回应请求,而不会产生真实的网络请求,从而节省了时间。同时,DNS 数据也被浏览器缓存了,这又省去了 DNS 查询环节。
如果要细看缓存,可以看这篇HTTP缓存

登录状态是如何保持的?(session、cookie)
1、用户输入账号密码
2、服务器验证成功后生成一段表示用户身份的字符串,并把该字符串写到响应头的 Set-Cookie 字段里,然后把响应头发送给浏览器。
3、浏览器在接收到服务器的响应头后,开始解析响应头,如果遇到响应头里含有 Set-Cookie 字段的情况,浏览器就会把这个字段信息保存到本地。
4、当用户再次访问时,浏览器会发起 HTTP 请求,但在发起请求之前,浏览器会读取之前保存的 Cookie 数据,并把数据写进请求头里的 Cookie 字段里。
5、服务器在收到 HTTP 请求头数据之后根据cookie信息去查询判断该用户是已登录状态,然后生成含有该用户信息的页面数据,并把生成的数据发送给浏览器。
6、用户收到对应的页面资源。

    浏览器中的 HTTP 请求从发起到结束一共经历了如下八个阶段:构建请求、查找缓存、准备 IP 和端口、等待 TCP 队列、建立 TCP 连接、发起 HTTP 请求、服务器处理请求、服务器返回请求和断开连接。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值