云服务器

首页 > 站内新闻 > 什么是304 状态码

什么是304 状态码

什么是 304 未修改响应?

HTTP 304 Not Modified 状态码是一个重定向代码,表示所请求的资源自上次请求以来未被更改。

简单来说,服务器会告诉浏览器,它请求的页面/资源自上次访问以来没有更新/更改。因此,浏览器无需重新发送和下载页面/资源(这既耗时又消耗带宽),而是可以直接显示缓存中存储的现有页面/资源。

304 状态码是如何工作的?

服务器要响应 304 状态码,需要知道浏览器缓存中存储的资源是否与其数据库中存储的版本相同。

具体操作方法如下:

缓存

当浏览器首次访问某个网页时,它会请求网站服务器存储的资源。

Web 服务器以 200 OK HTTP 代码响应请求,并将资源发送到浏览器。该响应的 HTTP 标头中包含一个哈希代码或 Etag(实体标签)——一个唯一的标识符,通常是一串数字,每当网站/页面/资源被修改或更新时,该标识符都会发生变化。

除了缓存网页内容外,浏览器还会记录请求的时间/日期。

条件请求

当再次访问同一网页时,浏览器会发起一个条件 HTTP 请求,告诉 Web 服务器只有在特定条件下才应该从服务器数据库收集网页资源并发送给浏览器下载。

条件请求使用两个基本的 HTTP 标头,每个标头都包含有关当前存储在浏览器缓存中的网页版本的信息:

“If-Modified-Since” 包含浏览器上次请求该网页的日期/时间。

“If-None-Match”包含 Etag(哈希码)。

服务器响应

Web 服务器将接收条件请求,并将 HTTP 标头信息与其数据库中的信息进行比较,返回 200 OK 或 304 Not Modified 状态。

当在 HTTP 标头中找到“If-Modified-Since”时,Web 服务器会将网页在其端更新的日期/时间与浏览器缓存该网页的日期/时间进行比较。

当在 HTTP 标头中找到“If-None-Match”时,Web 服务器将检查其数据库中网页的 Etag 是否与浏览器缓存的网页版本的 Etag 匹配。

当两个标头都用于验证时,“If-None-Match”将优先于“If-Modified-Since”。

如果 Web 服务器信息与请求头信息匹配,则 Web 服务器将返回 304 Not Modified HTTP 状态码,指示浏览器显示网页的缓存版本。如果信息不匹配,服务器将检索更新后的网页并将其发送给浏览器,浏览器随后会下载并缓存该网页,以供将来根据特定条件发出 HTTP 请求时使用。

304响应代码重要吗?

304 HTTP 代码的价值实际上取决于网站的大小。

对于大型网站(数万个页面),304 响应代码有助于减少带宽占用,提升网站速度,从而改善用户体验。它还有助于搜索引擎优化 (SEO),因为它可以释放抓取预算,并可能加快索引速度——搜索引擎机器人通常不会重新抓取已知未更改的页面,这使得它们能够更快地找到并抓取新增或更新的页面。

较小的网站也可以从 304 HTTP 代码的缓存功能中受益,但优势微乎其微。

也就是说,小型网站可能会遇到过大的流量,迅速消耗带宽,在这种情况下,304 错误代码或许能起到一定的作用。然而,还有更好的方法来缓解这个问题。

HTTP 304 状态码是错误的吗?

304 状态码对于优化网页性能和通过避免冗余数据传输来节省带宽来说是一项巨大的优势。

有些人将其比作错误代码(4xx 或 5xx),但并非如此。它是浏览器(客户端)和服务器之间用于通信和执行操作的重定向代码。

也就是说,客户端和服务器之间的通信可能会中断或失效。我们把这个问题称为“过期的304错误”。

客户端

如果用户经常访问某个网站,却总是遇到 304 Not Modified 状态码,这可能表明浏览器存在问题,无法正确执行条件 HTTP 请求并下载更新后的内容。

这个问题通常源于与浏览器相关的外部来源,例如基于浏览器的应用程序中的文件损坏、最近下载的软件中的文件损坏以及病毒或恶意软件。

这些来源中的任何一个都可能破坏浏览器的缓存和/或影响浏览器与网络服务器的通信方式。

服务器端

出现过时的 304 错误可能是由于 Web 服务器的重定向设置存在问题。

重定向设置是位于 .htaccess 文件系统中的指令,它使用 3xx 状态代码来控制网站上的网络流量的定向或重定向方式。

304 状态代码指令配置不当可能会导致内容交付过时、服务器资源利用效率低下,甚至出现浏览器兼容性问题。

修复过期 304 状态码的 5 种方法

幸运的是,我们可以采取一些措施来解决甚至彻底避免出现过时的 304 错误。

清除浏览器缓存

最常用且最有效的方法是删除所有浏览历史记录、cookie 和任何其他缓存数据。

所有先前存储的网页都会被删除,网站不再存储浏览器数据。用户访问网站时,就如同第一次访问一样,看到的是一个全新的网站副本。

清除 DNS 缓存

DNS缓存的工作原理与浏览器缓存类似,都是在操作系统层面存储数据。它也保存浏览数据,以及IP地址、主机名和资源记录。

额外的存储数据可以加快网页加载速度,因为浏览器无需经过整个域名系统流程。

就像清除浏览器缓存一样,刷新 DNS 缓存基本上重置了网页浏览体验,使用户(浏览器)能够收集新的可缓存内容。

扫描病毒和恶意软件

感染恶意软件或病毒的浏览器会损坏浏览器缓存文件,并中断与网络服务器的通信。

运行病毒和恶意软件扫描可以帮助识别和清除威胁,使浏览器恢复正常运行。

禁用/移除浏览器扩展程序

我们都喜欢好用的浏览器扩展程序,但有些扩展程序可能包含损坏的文件,这些文件会进入浏览器的缓存,影响 HTTP 标头与 Web 服务器标头之间的通信。

检查扩展程序并逐一禁用或删除它们,可以帮助找出罪魁祸首。

查看 .htaccess 重定向说明

服务器端有 .htaccess 文件。这是一个服务器配置文件,用于控制网站在目录级别的行为,包括如何处理 304 状态代码。

查看文件中的重定向指令可能会发现 Web 服务器向浏览器传递 304 状态代码的方式存在问题。

结论

HTTP 304 Not Modified 状态码旨在帮助简化客户端(浏览器)和服务器之间的通信,并且在正常工作时确实有助于优化 Web 性能和节省带宽。

但是,如果配置不正确或受到外部因素破坏,304 状态可能会造成内容过时的问题,从而影响用户体验和搜索引擎排名。

归根结底,我们有一些解决方案可以帮助解决或有望彻底避免 304 状态码带来的负面影响。

请记住,HTTP 304 状态码并非错误。

图片描述

发表回复