# 1.前言

HTTP协议,是建立在TCP连接的基础上的。HTTP 是一种允许浏览器向服务器获取 资源的协议,是 Web 的基础,由浏览器发起请求,获取文件HTML 文件、CSS 文件、JavaScript 文件、图片、视频等。HTTP 也是浏览器使用 最广的协议,所以要想学好浏览器,就要先深入了解 HTTP。

两个问题:

  • 为什么第一次打开网站时有点慢,第二次打开就很快
  • 登录一个网站后,下次再访问就无需登录了

其实这些现象都和HTTP请求有关。

# 2.浏览器端发起HTTP请求流程

在浏览器地址栏输入网址,后续发生了什么呢?

# 1.构建请求

首先,浏览器构建请求行信息,完成后,浏览器发起网络请求

get /index.html HTTP1.1

# 2.查找缓存

在发起请求之前,浏览器会先在本地查询是否又要请求的文件。

浏览器发现请求的资源在浏览器缓存中有副本,则拦截请求,返回该资源的副本,并直接结束请求,好处:

  • 减少HTTP请求,减少服务器压力,提升性能

如果缓存查找失败,就需要网络请求了。

# 3.准备IP地址和端口

HTTP 的内容是通过 TCP 的传输数据阶段来实现的,所以需要TCP建立连接先,获取域名通过DNS解析IP,url没有指明端口号,则默认80

# 4.等待TCP队列

Chrome机制是一个域名最多建立6个TCP连接,如果是个TCP请求,则4个需要排队。如果少于6的话,直接进行下一步连接即可

# 5.建立TCP连接

进行三次握手,工作原理。

# 6.发送HTTP请求

建立TCP连接后,浏览器可以和服务器通信了。HTTP的数据就是在这个阶段发送的

# 3.服务端处理HTTP请求流程

HTTP请求信息到达了服务器,接下来,服务器会根据浏览器的请 求信息来准备相应的内容。

# 1.返回请求

服务器处理结束后,便可以返回数据给浏览器了

# 2.断开连接

一般情况下,服务器向浏览器返回请求数据,TCP就要断开连接。但是浏览器或者服务器在其头信息加上了

Connection:Keep-Alive

那么TCP连接在发送后任然保持打开状态,这样浏览器就可以继续通过同一个TCP连接发送请求。保持TCP连接可以省去下次请求的建立连接时间,提升资源加载速度。

# 3.重定向

有些时候输入baidu.com,最终发现打开的是https://www.baidu.com

# 4.解答疑惑

# 1.为什么第一次打开很慢?第二次快?

  • 第一次加载页面时,缓存了一些数据:
    • DNS资源缓存,在本地做IP与域名映射即可
    • 页面资源缓存
  • 第二次很多资源被缓存,少去请求时间

# 2.为什么第二次打开页面保持登陆状态?

第一次登陆成功之后,服务器生成表示用户身份的字符串,写到响应头Set-Cookie字段里,把响应头给浏览器

Set-Cookie: UID=3431uad;

浏览器接收到响应后,解析响应头,遇到Set-Cookie字段,浏览器将会它保存本地。用户再次访问时,浏览器发起请求前就会读取之前保存的Cookie数据,并把数据写进请求头里的Cookie字段,然后浏览器再将请求头发送给服务器。服务器接收到HTTP请求数据后,查找请求头Cookie字段,服务器查询后台,判断该用户登录状态,然后生成含有该用户信息页面的数据,并把生成的数据发送给浏览器。

最后更新于: 2/7/2021, 2:58:38 PM