【问题标题】:If modified since - HTTP protocol如果修改后 - HTTP 协议
【发布时间】:2014-03-11 02:45:57
【问题描述】:

如果我的浏览器使用缓存(本地缓存),是否保证它发送的每个 HTTP 请求都包含“IF MODIFIED SINCE”标题行?

如果不是,我如何定义它会?如果我为浏览器定义代理服务器怎么办?那么它会自动添加它吗?

提前致谢

【问题讨论】:

    标签: http


    【解决方案1】:

    我刚刚使用我的 RESTful Web 服务处理此问题,并对特定资源进行了一些测试。首先,我试图通过在资源的 HTTP 响应上设置以下 HTTP 标头来控制我的 Web 服务器的浏览器缓存:

    Cache-Control: must-revalidate, max-age=30
    Last-Modified: Mon May 19 11:21:05 GMT 2014
    Expires: Mon May 19 11:51:05 GMT 2014
    

    然后,在我的 Web UI 中,我有一个计时器,它会定期(每 5 秒)对我所说的可缓存资源执行 GET。由于浏览器缓存中的资源尚未过期,因此资源的 GET 请求是从浏览器缓存中提供的,但是,一旦“max-age”过期,下一个 GET 请求就会发送到服务器,并且浏览器会添加“如果-Modified-Since”标头,其中“Last-Modified”日期作为值,如下所示:

    [GET] - /cms_cm_web/api/notification
    referer: http://localhost:8080/cms_ui/#/
    accept: application/json, text/plain, */*
    accept-language: en-us
    ua-cpu: AMD64
    accept-encoding: gzip, deflate
    user-agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    host: localhost:8080
    if-modified-since: Mon, May 19 11:21:05 GMT 2014
    connection: Keep-Alive
    

    这来自 IE9 浏览器。我从最新的 Firefox 和 Chrome 浏览器也得到了同样的结果。 从这里,服务器可以查找“If-Modified-Since”标头,如果它确定资源没有被修改,则返回 304 Not Modified 响应,否则,它返回具有 200 OK 响应的资源表示。

    因此,根据 HTTP 规范,您可以使用“Expires”和/或“Cache-Control”标头以及“Last-Modified”标头来控制缓存。这将导致浏览器缓存执行所谓的“条件 GET”请求,因为它包含“If-Modified-Since”标头。

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 2018-10-15
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多