`
zdl_411437734
  • 浏览: 8516 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

HTTP 请求头 标签的作用 If-Modified-Since

阅读更多

一直以来没有留意过HTTP请求头的IMS(If-Modified-Since)标签。

最近在分析Squid的access.log日志文件时,发现了一个现象。
就是即使是对同一个文件进行HTTP请求,第一次和第二次产生的网络流量数据也是不一致的。


在调查的过程中,逐渐了解了HTTP的If-Modified-Since的头标签的作用。

 

大家都知道客户端浏览器是有缓存的,里面存放之前访问过的一些网页文件。
例如IE,会把缓存文件存到“C:\Documents and Settings\zh2000g\Local Settings\Temporary Internet Files”
这样类似的目录里。
其实缓存里存储的不只是网页文件,还有服务器发过来的该文件的最后服务器修改时间。


If-Modified-Since是标准的HTTP请求头标签,在发送HTTP请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较。

如果时间一致,那么返回HTTP状态码304(不返回文件内容),客户端接到之后,就直接把本地缓存文件显示到浏览器中。

如果时间不一致,就返回HTTP状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中。

 下面用一个简单的小例子说明一下。

由于演示例子需要截取HTTP Request和Response的信息,我在这里使用的工具是Fiddler。
感兴趣的朋友可以到【http://www.fiddler2.com/Fiddler2/version.asp 】去下载。

 

1.首先在服务器创建一个简单的HTML文件,用浏览器访问一下,成功表示HTML页面。Fiddler就会产生下面的捕获信息。
  需要留意的是
  (1)因为是第一次访问该页面,客户端发请求时,请求头中没有If-Modified-Since标签。
  (2)服务器返回的HTTP状态码是200,并发送页面的全部内容。
  (3)服务器返回的HTTP头标签中有Last-Modified,告诉客户端页面的最后修改时间。  
  
2.在浏览器中刷新一下页面,Fiddler就会产生下面的捕获信息。
  需要注意的是
  (1)客户端发HTTP请求时,使用If-Modified-Since标签,把上次服务器告诉它的文件最后修改时间返回到服务器端了。
  (2)因为文件没有改动过,所以服务器返回的HTTP状态码是304,没有发送页面的内容。
 

 

3.用文本编辑器稍微改动一下页面文件,保存。再用浏览器访问一下,Fiddler就会产生下面的捕获信息。
需要留意的是
  (1)客户端发HTTP请求时,使用If-Modified-Since标签,把上次服务器告诉它的文件最后修改时间返回到服务器端了。
  (2)因为文件被改动过,两边时间不一致,所以服务器返回的HTTP状态码是200,并发送新页面的全部内容。
  (3)服务器返回的HTTP头标签中有Last-Modified,告诉客户端页面的新的最后修改时间。

 

 

HTTP的If-Modified-Since头标签与客户端缓存相互配合,大大节约了网络流量。

分享到:
评论

相关推荐

    http协议-缓存控制:etag If-None-Match / Last-Modified If-Modified-Since

    客户端在后续请求时,会在If-Modified-Since字段中包含上一次获取资源的时间戳。如果服务器上的资源自上次修改后未变化,服务器同样会返回304 Not Modified,客户端继续使用缓存。 这两个机制虽然相似,但Etag更为...

    Ajax 缓存问题,Ajax 缓存问题

    可以设置`"If-Modified-Since"`为`"0"`或`"Cache-Control"`为`"no-cache"`,如下: ```javascript xhr.setRequestHeader("If-Modified-Since", "0"); xhr.setRequestHeader("Cache-Control", "no-cache"); ``` ...

    Caching HTTP Headers, Last-Modified and ETag

    当客户端(浏览器)向服务器请求资源时,如果之前已经获取过该资源,它会在请求中包含一个 `If-Modified-Since` 头,带上上次获取资源时记录的 `Last-Modified` 时间戳。如果服务器发现资源自那时以来未被修改,它会...

    使用IE或Edge浏览器通过SAS访问File文件只能访问一次问题分析-xiaoqiang1

    这个问题的核心在于HTTP请求头中的"If-Modified-Since"字段。在第一次请求文件时,浏览器通常不会包含这个字段。然而,当浏览器缓存了文件并再次请求时,如IE和Edge,它们会在后续请求中添加"If-Modified-Since"字段...

    JavaWeb开发技术-HTTP请求头.pptx

    * If-Modified-Since:指定请求的最后修改时间 * Host:指定请求的主机名 * Accept-Encoding:指定客户端可以处理的编码格式 * Max-Forwards:指定代理服务器的最大转发次数 * User-Agent:指定客户端的信息 * ...

    常见请求和响应头-说明.doc

    HTTP请求头和响应头是HTTP协议中不可或缺的部分,它们在客户端和服务器之间交换信息时扮演着关键角色。请求头主要用于指示客户端的偏好和能力,而响应头则包含了服务器对请求的响应信息。以下是一些常见的请求头和...

    HTTP缓存头Last-Modified和ETag介绍

    当浏览器再次请求该资源时,它会将上次接收到的Last-Modified值通过`If-Modified-Since`头部发送回服务器,询问服务器资源是否自那时起有变动。如果资源未改变,服务器会返回一个304 Not Modified状态码,告诉浏览器...

    HTTP请求头大全 - 常用参考表对照表 - 脚本之家在线工具1

    10. **If-Modified-Since** 和 **If-None-Match**: 用于缓存控制,如果服务器资源未修改,可以避免不必要的数据传输。 HTTP请求方法主要有GET、POST、PUT、DELETE、HEAD、OPTIONS等,每种方法对应不同的操作: - ...

    node-modified:修改后是一个简单的请求客户端来处理http本地缓存

    修改last-modified的HTTP规范,实现了last-modified , if-modified-since , etag , if-none-match 。概要Modified是根据构建的,并通过缓存支持对其进行修饰,因此,如果您熟悉请求,则几乎可以使用修改了。 var...

    常见请求和响应头-说明.docx

    17. If-Modified-Since: 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回 304 码,例如 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT。 18. If-None-Match: 如果内容未改变返回 304 码,参数...

    HTTP请求头概述(HttpServletRequest)

    11. **If-Modified-Since**:这个请求头用于告知服务器只返回在指定日期之后有所更改的资源。如果资源未更改,则服务器可以返回一个304 Not Modified响应,而不是整个资源实体。 12. **Pragma**:用于指定指令,...

    计算机网络实验项目 HTTP-Proxy-Server

    (1)设计并实现一个基本 HTTP 代理服务器。要求在指定端口(例如 8080)接收来自客户的 ...存原服务器响应的对象,并能够通过修改请求报文(添加 if-modified-since 头行),向原服务器确认缓存对象是否是最新版本。

    最新大厂前端面试题-笔试题2.doc

    If-Modified-Since 则是客户端再次发起该请求时,携带上次请求返回的 Last-Modified 值。 Etag 是服务器响应请求时,返回当前资源文件的一个由服务器生成的唯一标识。If-None-Match 则是客户端再次发起该请求时,...

    http请求格式

    - **If-Modified-Since**: 客户端仅请求自某个时间后修改的资源。 - **If-None-Match**: 与If-Match相反操作,同样适用于PUT方法。 - **If-Unmodified-Since**: 与If-Modified-Since相反操作。 - **Pragma**: 通常...

    记录并显示网页的最后修改时间

    配合`If-Modified-Since`请求头,服务器可以更精确地控制资源更新。当`If-Modified-Since`的日期与服务器资源的`Last-Modified`相同,服务器可以返回304 Not Modified状态,避免传输整个文件。 7. **性能优化** ...

    Http消息头中常用的请求头和响应头.docx

    * If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回 304;Not Modified”应答。 * Pragma:指定;no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有...

    HTTP 请求报头详解

    * Request Header Fields:Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Expect、From、Host、If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since、Max-...

    计算机网络实验-HTTP11

    8. IF-MODIFIED-SINCE:在第一个HTTP GET请求中,未找到"IF-MODIFIED-SINCE"行。这个头字段通常用于告知服务器,客户端拥有该资源的较新版本,询问自那时以来资源是否已被修改。 9. 服务器响应:服务器会根据请求...

    浏览器HTTP协议请求头信息.docx

    HTTP头信息还包括其他一些关键字段,如`Authorization`用于认证用户身份,`Content-Disposition`指示附件的保存方式,`If-Modified-Since`或`If-None-Match`用于检查资源是否更新,`ETag`是资源的唯一标识,`...

    HTTP常见请求和响应头说明1

    以上是HTTP请求和响应头的详细介绍,这些头信息在HTTP通信中起到关键作用,它们允许客户端和服务器之间交换必要的信息,确保数据的正确传输和处理。了解并正确使用这些头信息对于开发和调试Web应用至关重要。

Global site tag (gtag.js) - Google Analytics