如何进行服务器304验证 (去服务器304验证)

当用户请求一个网页时,服务器会根据请求的URL生成相应的响应,比如HTML、CSS、JavaScript文件等。用户每次打开网页时,浏览器都会从服务器上重新请求这些文件,这会导致大量的请求,降低网站的性能和响应速度。为了解决这个问题,HTTP协议提供了304状态码。这个状态码表示请求资源未被修改,服务器可以通过发送304状态码来告诉浏览器直接使用本地缓存。

呢?以下是一些常用的方法:

1.在服务器配置文件中启用缓存

服务器配置文件是一个包含各种设置的文本文件,可以用来修改服务器的行为。在配置文件中启用缓存可以帮助服务器检测资源是否已被修改。在Apache服务器上,可以通过在配置文件中添加以下代码来启用缓存:

ExpiresActive On

ExpiresByType text/html “access plus 1 days”

ExpiresByType text/css “access plus 1 days”

ExpiresByType application/javascript “access plus 1 days”

此代码指示服务器启用缓存,并设置资源的过期时间为1天。如果一个资源在这个时间内被修改,则服务器会重新发送该资源的完整版本。如果未被修改,则服务器将发送304状态码。

2.使用条件GET请求

条件GET请求是一种HTTP请求,只有在资源被修改时才会返回完整版本,在资源未被修改时会返回304状态码。条件GET请求可以通过在HTTP请求头中添加If-Modified-Since和If-None-Match字段来实现。例如:

GET /index.html HTTP/1.1

Host: www.example.com

If-Modified-Since: Wed, 21 Oct 2023 07:28:00 GMT

If-None-Match: “342d09-25a-521f3f64”

这个请求中,浏览器指示服务器只返回在If-Modified-Since字段中指定时间之后修改过的文件。如果未修改,则服务器会返回304状态码。

3.使用ETag标记

ETag是一种HTTP响应头,用于标识资源的版本号。当资源被修改时,ETag值也会随之更改。浏览器可以在发送请求时将ETag值包含在请求头中,以便服务器检查资源是否已被修改。如果没有修改,则服务器可以发送304状态码。以下是一个使用ETag标记的HTTP响应头的示例:

HTTP/1.1 200 OK

Date: Fri, 19 Nov 2023 05:03:07 GMT

Server: Apache/2.4.18 (Ubuntu)

ETag: “342d09-25a-521f3f64”

Content-Length: 5979

Content-Type: text/html; charset=UTF-8

这个响应头包含一个ETag标记,表明这个资源的版本号为“342d09-25a-521f3f64”。浏览器可以在发送请求时将这个标记作为If-None-Match字段的值,以便服务器检查资源是否已被修改。

在实现服务器304验证时,请注意以下几点:

1.必须正确设置缓存时间,否则缓存可能会过期。

2.使用条件GET请求时,必须将资源的最后修改时间、ETag标记和缓存头文件正确设置。

3.ETag标记必须正确设置,否则服务器可能会误判资源是否已被修改。

服务器304验证可以减少服务器负载和提高网站性能。本文介绍了几种常用的方法来实现服务器304验证。无论您是一个网站管理员还是一个开发人员,学习这些技术将有助于优化您的网站并提高用户体验。

相关问题拓展阅读:

304 Not Modified要怎么解决

当你之一次访问时,服务器会返回给你200状态码,同时在头里追加ETag值给你。浏览器拿到后将其缓存。

下一次再访问时,因浏览器已经有该地址的ETag值了。会将其缓存的ETag值内容放在请求头的If-None-Match中,服务器检查其自身内容的ETag值是否与其一致,如果一致就会返回

304状态码

,告诉你内容和你保存的一致,没有发生改变过。

举例来说,

C:S,你几岁了?

S:C,我18岁了。

===========

C:S,你几圆羡辩岁了?我猜你18岁了。

S:靠,你知道还问我?(304)橘缺

===========

C:S,你几岁了?我猜你18岁了。

S:C,我19岁了。(200)

以上就是200和304的解释。

Cache-Control和Expires则是告诉浏览器缓存这些数据的策略。

drupal则并非是非法hash导致的问题,问题在于gzip上。gzip其实就是gunzip了。ZIP压缩会有个特点,相同的内容重复压缩得到的

二进制

是不一样的,这和其字典策略派明相关(猜测,未验证),你可以随便压缩个文件对比2次的ZIP包checksum值是否一致来确认。那么这样就可以解释了,虽然原始内容没有改变,但是传输时因为用了gzip,所以drupal认为原始数据始终在改变,每次返回200也符合我先前所讲的内容。

最后,根据REST的原则,可以看出一些请求是幂等的,一些请求是非幂等的。那么服务器与客户端之间的缓存层,比如CDN也好,drupal,或者nginx等,都会对幂等请求做缓存策略,非幂等请求不做缓存策略。这里如何来控制,则需要服务器端在返回内容时利用好Cache-Control和Expires等头信息来进行。

HTTP 状态消息分别表示什么?

状态码【200】表示【请求成功】,一般在GET和森亩POST请求中可以见到;

状此带森态码【302】表示【资源临时移动】;

状态码【304】表示【所请求的资源并未修改】;

状态码【403】表示【服务器拒绝执行客户端的请求】;

状态码【404】表示【服务器找不到客户端所行悉请求的资源(网页)】;

状态码【500】表示【服务器内部错误】。

code说明

200请求被成功处理

304页族埋面未孝衡修改

302临时性巧穗做重定向

403没有权限访问

404标识没有对应的资源

500服务器错误

503服务器停机或正在维护

关于去服务器304验证的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 如何进行服务器304验证 (去服务器304验证)