HTTP 一些知识点的总结

2019-11-14  本文已影响0人  卡布奇诺的秘密_Me

三次握手和四次挥手

请求类型

SYN :请求建立

ACK :请求确认

FIN :请求关闭

三次握手

为什么三次?

我的理解是,防止客户端发送 SYN 后,过来很久时间服务端才收到,若此时客户端不再需要建立连接,服务端建立连接会导致资源的浪费,所以需要再次返回一个 SYN 和 ACK。

四次挥手

为什么 2、3 不一起返回?

我的理解是,当服务端收到 FIN 后,会关闭连接,但关闭是一个异步的操作,需要时间去关闭,这个时间不确定,如果花了很长时间才关闭,客户端就会等很久,但客户端其实不需要关心你那边有没有关闭,所以服务端会先返回一个 ACK,告诉客户端我知道了,正在关,客户端收到后可以去先执行其他事务,而服务端等到关闭后,再发送一个 FIN,此时客户端收到后,会返回一个 ACK 表示明白。

HTTP 状态码

100、200:状态

300+ 资源更改

比如链接重定向、缓存已修改,常见为:

400+ 请求错误

常见为:

500+ 服务端错误

常见为:

HTTP 的持续连接

HTTP 缓存

首先浏览器的缓存可以理解为在浏览器内部有一个小型的缓存数据库,某键对应某文件。

而页面在加载的时候,会根据要求把文件放入缓存,也会根据需求去读取使用,具体分为两种类型:

强制缓存

假设文件为强制缓存,流程如下:

是否强制缓存根据相应头上的一个字段判断,根据 HTTP 的版本不同,有不同为不同的字段:

HTTP1.0:Expires 字段代码其到期时间。

HTTP1.1:Cache-Control 字段控制,其可选值如下:

协商缓存

假设文件为协商缓存,流程如下:

分开说一下 HTTP1.0 和 HTTP2.0 的区别。

HTTP1.0

在文件的第一次请求时,响应头会返回一个字段:Last-Modified,代表此资源的最后修改时间,浏览器保留此值。

在后面的请求中,请求头中会存在 If-Modified-Since 的字段,值为第一次的 Last-Modified 的值。

服务器以此进行比较,判断最后返回 200 或 304,若是 200 的话,取响应头的 Last-Modified 值更新本地保存的。

PS:这样比较的话,如果文件仅仅是 ctrl + s 一下,也会进行更新。

HTTP1.1

在文件的第一次请求时,响应头会返回一个字段:Etag,代表服务器以此资源而生成一个 id 标志,浏览器保留此值。

在后面的请求中,请求头中会存在 If-None-Match 的字段,值为第一次的 Etag 的值。

服务器以此进行比较,判断最后返回 200 或 304,若是 200 的话,取响应头的 Etag 值更新本地保存的。

PS:这样比较的话,文件内容不变是不会更新的。

上一篇 下一篇

猜你喜欢

热点阅读