You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

比较Java Web服务器中的if-modified-since和last modified。

if-modified-since和last modified是用于浏览器缓存控制的HTTP头部字段。

if-modified-since是浏览器在发送GET请求时,通过该字段告诉服务器上次请求的资源的最后修改时间。服务器收到请求后,会将该字段与资源的last modified进行比较。如果资源的last modified较新,服务器会返回完整的资源内容;如果last modified较旧,服务器会返回304 Not Modified状态码,并且不返回资源内容,浏览器会从缓存中加载资源。

下面是一个Java Web服务器中使用if-modified-since和last modified的示例代码:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet {
    
    private static final long serialVersionUID = 1L;
    private static final String RESOURCE_PATH = "/path/to/resource";
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // 获取资源的最后修改时间
        Path resourcePath = Paths.get(RESOURCE_PATH);
        long lastModified = Files.getLastModifiedTime(resourcePath).toMillis();
        
        // 将最后修改时间格式化为HTTP头部所需的格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
        String lastModifiedString = dateFormat.format(new Date(lastModified));
        
        // 获取请求的if-modified-since字段
        String ifModifiedSince = request.getHeader("If-Modified-Since");
        
        // 比较资源的最后修改时间和if-modified-since字段
        if (ifModifiedSince != null && ifModifiedSince.equals(lastModifiedString)) {
            // 资源未修改,返回304 Not Modified状态码
            response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
        } else {
            // 资源已修改,返回完整的资源内容
            response.setStatus(HttpServletResponse.SC_OK);
            response.setContentType(Files.probeContentType(resourcePath));
            response.setContentLength((int) Files.size(resourcePath));
            Files.copy(resourcePath, response.getOutputStream());
        }
        
        // 设置资源的最后修改时间到响应头部
        response.setHeader("Last-Modified", lastModifiedString);
    }
}

在上述代码中,首先获取资源的最后修改时间,并将其格式化为字符串。然后获取请求的if-modified-since字段,并与资源的最后修改时间进行比较。如果两者相等,则返回304 Not Modified状态码,否则返回完整的资源内容,并设置最后修改时间到响应头部。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

关于浏览器缓存|社区征文

会将上一次返回的Etag值放到request header里的If-None-Match里,服务器只需要比较客户端传来的If-None-Match跟自己服务器上该资源的ETag是否一致,就能很好地判断资源相对客户端而言是否被修改过了。#### **Last-Modified****用于标记请求资源在服务器上的最后一次修改时间。** 浏览器下一次请求这个资源,浏览器检测到有 Last-Modified这个header,于是添加If-Modified-Since这个header,值就是Last-Modified中的值;服务器再次收...

Actor模型 - 分布式应用框架Akka

相当于 OOP 对象中的成员函数。Actor 之间不能直接调用其他 Actor 的计算逻辑。Actor 只有收到消息才会触发自身的计算行为。**消息(Mail)** :Actor 的消息以邮件形式在多个 Actor 之间通信传递,每个 Actor 会有一个自己的邮箱(MailBox),用于接收来自其他 Actor 的消息,因此 Actor 模型中的消息也称为邮件。一般情况下,对于邮箱里面的消息,Actor 是按照**消息达到的先后顺序(FIFO)进行读取和处理**的。**Actor 工作原...

大前端工程化的实践与理解 | 社区征文

data = 'modified data' console.log(`bar executing, data is now${data}`) } window.module1 = {foo, bar}})(window)```数据 data 完全做到了私有,外界无法修改 data 值。 那么如何... JavaScript 特性,对类似的功能进行了模拟,为后续方案打开了大门。### **CommonJS**CommonJS 规范最早是 Node 独有的规范,目前也仍然广泛使用,比如在 Webpack 中就能见到它。浏览器中使用需要用到`Browserify`解...

如何排查使用CDN加速后访问资源返回304状态码问题

并返回最新文件修改时间和ETag。1.浏览器客户端第一次访问一个图片,请求成功,服务器返回200状态码,Response Header 响应包里会包含 Last-Modified 最近修改时间和 ETag。如下图所示![alt](https://lf6-volc-editor.volccdn.com/obj/volcfe/sop-public/upload_da590fa3894e2b9ec5dcfee73d6067aa.png)2.当客户端再次访问时,会在请求头中加上之前读取内容的修改时间和 ETag,如下图所示,服务器会根据 ETag 和 Last-modified 判断...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

比较Java Web服务器中的if-modified-since和last modified。-优选内容

限定条件下载(Android SDK)
(Not modified) If-Unmodified-Since 如果指定的时间等于或者晚于对象最后修改时间,则正常下载,否则返回 412 错误(Precondition failed) If-Match 如果指定的 ETag 和待下载对象的 ETag 匹配,则正常下载,否则返回 412 错误( Precondition failed) If-None-Match 如果指定的 ETag 和待下载对象的 ETag 不匹配,则正常下载,否则返回 304 错误(Not modified) 示例代码以下代码展示如何设置限定条件进行对象下载。 java impor...
0005-00000028
问题描述 条件请求参数不满足。 问题原因 用户请求中包含 If-Modified-SinceIf-Match 等条件请求参数,但某个条件参数不满足,导致请求错误。 问题示例 无。 解决方案 参考错误消息调整不满足条件的参数。
0005-00000033
问题描述 请求中 x-tos-copy-source-if-modified-sinceIf-Modified-Since 字段取值非法。 问题原因 用户请求中包含 x-tos-copy-source-if-modified-sinceIf-Modified-Since,但是该字段取值非 GMT 格式。 问题示例 您发起对象下载请求,但请求中 If-Modified-Since 头域取值非 GMT 格式。 Go GET /objectName HTTP/1.1Host: bucketname.tos-cn-beijing.volces.comDate: GMT DateIf-Modified-Since: abcAuthorization: auth...
限定条件下载(Java SDK)
TOS Java SDK 支持设置下载对象的限定条件。您可以在下载对象时,设置下载对象的限制条件(如对象 ETag 或对象修改时间),当对象信息满足设置的限定条件时服务端才会返回对象数据,否则会返回相应错误。本文介绍如何通... 否则返回 304 错误(Not modified) If-Unmodified-Since 如果指定的时间等于或者晚于对象最后修改时间,则正常下载,否则返回 412 错误(Precondition failed) If-Match 如果指定的 ETag 和待下载对象的 ETag 匹配...

比较Java Web服务器中的if-modified-since和last modified。-相关内容

限定条件下载(Go SDK)

Modified-Since If-Unmodified-Since 可以同时存在,If-Match 和 If-None-Match 也可以同时存在。 可以通过使用 TOS Go SDK 的 HeadObjectV2 接口获取对象 Etag 信息。 限定条件说明下载对象时可以指定下载对象... { if err != nil { if serverErr, ok := err.(*tos.TosServerError); ok { fmt.Println("Error:", serverErr.Error()) fmt.Println("Request ID:", serverErr.RequestID) fmt.Pri...

限定条件下载(Node.js SDK)

否则返回 304 Not Modified。 If-Modified-Since 只有在对象自指定时间以来被修改过时才返回该对象,否则返回 304 Not Modified。 If-Unmodified-Since 只有在对象自指定时间以来未被修改过时才返回该对象,否则返回 412 Precondition Failed。 示例代码javascript // 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入import { TosClient, TosClientError, TosServerError } from '@volcengin...

限定条件下载(.NET SDK)

TOS .NET SDK 支持设置下载对象的限定条件。您可以在下载对象时,设置下载对象的限制条件(例如对象 ETag 或对象修改时间),当对象信息满足设置的限定条件时服务端才会返回对象数据,否则会返回相应错误。本文介绍如何... Modified-Since If-Unmodified-Since 可以同时存在,If-Match 和 If-None-Match 也可以同时存在。 您也可以使用 TOS .NET SDK HeadObject 接口获取对象 Etag 信息。 参数 描述 If-Match 只有当传入的ETag与对...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

限定条件下载(Browser.js SDK)

Modified-Since If-Unmodified-Since 可以同时存在,If-Match 和 If-None-Match 也可以同时存在。 支持使用 TOS Browser SDK 的 headObject 接口获取对象 Etag 信息。 限定条件说明下载对象时可以指定下载对象条件,当满足条件时进行下载对象。限定条件如下: 参数 描述 If-Match 只有当传入的 ETag 与对象的 ETag 相等才返回对象,否则返回 412 Precondition Failed。 If-None-Match 只有当传入的 ETag 与对象的 ETag 不相...

限定条件下载(Python SDK)

与对象的 ETag相等才返回对象,否则返回412 Precondition Failed。 if_match If-Modified-Since 只有在对象自指定时间以来被修改过时才返回该对象,否则返回304 Not Modified。 if_modified_since If-None-Matc... 否则返回错误304 Not modified。 etag = 'DC21493F505BA3739562D8CC452C****' client.get_object(bucket_name, object_key, if_none_match=etag)except tos.exceptions.TosServerError as e: 不满足限定...

限定条件下载(PHP SDK)

下载对象时,可以指定一个或多个限定条件,满足限定条件则下载,不满足条件则抛出异常不会触发下载行为。TOS 服务遵照 HTTP 规范,提供了多种限定条件,包括 If-Match、If-Unmodified-Since 等。 示例代码您可以通过 GetObjectInput->setIfMatch 在下载时指定限定条件,示例代码如下: php 'your region', 'endpoint' => 'your endpoint', // 从环境变量中获取访问密钥 'ak' => getenv('TOS_ACCESS_KEY'), ...

HeadObject

If-None-Match Header String 否 8a36be0d764367db4eea2deb16b71543 只有当传入期望的 ETag 与对象的 ETag 不相等才返回对象元信息,否则返回 304 Not Modified。 If-Unmodified-Since Header String 否 Mon, 04 Jul 2022 02:57:31 GMT 只有传入参数中的时间等于或者晚于对象实际修改时间才返回该对象元信息,否则返回 412 Precondition Failed。时间格式为 RFC1123 GMT。 x-tos-server-side-encryption-customer-al...

限定条件下载(C++ SDK)

If-Modified-Since 只有在对象自指定时间以来被修改过时才返回该对象,否则返回304 Not Modified。时间格式为RFC1123 GMT。 If-None-Match 只有当传入的ETag与对象的 ETag不相等才返回对象,否则返回304 Not Modified。 If-Unmodified-Since 只有在对象自指定时间以来未被修改过时才返回该对象,否则返回412 Precondition Failed。时间格式为 RFC1123 GMT。 示例代码以下代码用于限定条件下载桶 examplebucket 中的对象 ex...

Actor模型 - 分布式应用框架Akka

相当于 OOP 对象中的成员函数。Actor 之间不能直接调用其他 Actor 的计算逻辑。Actor 只有收到消息才会触发自身的计算行为。**消息(Mail)** :Actor 的消息以邮件形式在多个 Actor 之间通信传递,每个 Actor 会有一个自己的邮箱(MailBox),用于接收来自其他 Actor 的消息,因此 Actor 模型中的消息也称为邮件。一般情况下,对于邮箱里面的消息,Actor 是按照**消息达到的先后顺序(FIFO)进行读取和处理**的。**Actor 工作原...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询