Skip to content

说说http状态码 304

304的含义和工作原理

含义

HTTP 状态码 304 表示“未修改”(Not Modified)。它是一种特殊的状态码,用于优化网络通信,减少数据传输量,提高性能。当客户端发送带有条件的请求(通常是 GET 请求)时,服务器可以使用 304 状态码来指示客户端使用缓存的副本,而无需返回实际的响应数据。

工作原理:

客户端发送一个带有条件的请求给服务器,通常是带有 If-Modified-Since 或 If-None-Match 头的 GET 请求。这些头部包含关于客户端上次请求的信息,如最后修改时间或实体标签(Etag)。

服务器接收到这个请求后,会检查条件头部中的信息和资源的当前状态。如果服务器判断资源自上次请求以来没有发生修改,它会发送一个 304 响应。

客户端收到 304 响应后,会从本地缓存中获取资源,而不是从服务器重新下载。这样可以节省网络带宽,并提高加载速度。

如果服务器判断资源已经发生了修改,它会返回一个正常的响应,包含新的资源内容和相关的响应头部。

通过使用 304 状态码,服务器可以避免无效的数据传输,减少网络流量和延迟,提高性能和效率。客户端可以通过缓存机制减少对服务器的请求,提供更快的用户体验。

需要注意的是,服务器和客户端必须正确处理和支持条件请求头部(If-Modified-Since、If-None-Match 等),并正确设置资源的缓存策略(如缓存标记、过期时间等),才能实现有效的 304 响应。

总结

HTTP 状态码 304 表示资源未修改,客户端可以使用缓存的副本。通过条件请求头部和服务器的判断,可以避免无效的数据传输,提高性能和效率。

强缓存和协商缓

存是浏览器缓存机制中两种常见的策略,用于提高网页加载性能和减少网络流量。它们的含义、区别和使用场景如下所示

强缓存

含义:强缓存是通过设置响应头部来指示浏览器直接使用缓存的副本,而不需要向服务器发起请求。

区别:当使用强缓存时,浏览器不需要与服务器进行通信,直接从本地缓存中获取资源,这提供了更快的访问速度。

使用场景:强缓存适用于那些不经常变化的静态资源,如图片、CSS 文件、JavaScript 文件等。可以通过设置响应头部的 Expires 或 Cache-Control 字段来控制缓存的过期时间。

协商缓存

含义:协商缓存是通过与服务器进行通信来验证资源是否发生了变化,从而确定是否可以使用缓存的副本。

区别:当使用协商缓存时,浏览器会向服务器发送请求,并带上一些条件信息,如 If-Modified-Since(自上次请求后最后修改时间)或 If-None-Match(实体标签)。

使用场景:协商缓存适用于那些可能会发生变化的资源,如动态生成的网页、接口数据等。可以通过设置响应头部的 Last-Modified(最后修改时间)或 Etag(实体标签)字段来提供条件验证的信息。

区别与使用场景

强缓存是在客户端本地进行缓存控制,不需要与服务器进行通信,适用于不经常变化的静态资源,可以提供更快的访问速度。

协商缓存需要与服务器进行通信,通过条件验证来确定是否可以使用缓存的副本,适用于可能会发生变化的资源,可以减少不必要的数据传输。

使用场景根据资源的特性来选择缓存策略,对于静态资源可以优先考虑强缓存,对于动态或频繁变化的资源可以考虑协商缓存。

需要注意的是,强缓存和协商缓存可以结合使用,优先考虑强缓存,若强缓存失效则进行协商缓存验证。这样可以在一定程度上兼顾性能和资源更新的需要。