博客已经搬家,请访问如下地址:http://www.czhphp.com

If-Modified-Since & If-None-Match

If-Modified-Since,和 Last-Modified 一样都是用于记录页面最后修改时间的 HTTP 头信息,只是 Last-Modified 是由服务器往客户端发送的 HTTP 头,而 If-Modified-Since 则是由客户端往服务器发送的头,可 以看到,再次请求本地存在的 cache 页面时,客户端会通过 If-Modified-Since 头将先前服务器端发过来的 Last-Modified 最后修改时间戳发送回去,这是为了让服务器端进行验证,通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则 返回 304 告诉客户端其本地 cache 的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。
 
If-None-Match,它和ETags(HTTP协议规格说明定义ETag为“被请求变量的实体值”,或者是一个可以与Web资源关联的记号)常用来判断当前请求资源是否改变。类似于Last-Modified和HTTP-IF-MODIFIED-SINCE。但是有所不同的是Last-Modified和HTTP-IF-MODIFIED-SINCE只判断资源的最后修改时间,而ETags和If-None-Match可以是资源任何的任何属性,不如资源的MD5等。

ETags和If-None-Match的工作原理是在HTTP Response中添加ETags信息。当客户端再次请求该资源时,将在HTTP Request中加入If-None-Match信息(ETags的值)。如果服务器验证资源的ETags没有改变(该资源没有改变),将返回一个304状态;否则,服务器将返回200状态,并返回该资源和新的ETags。
 
ETag如何帮助提升性能?
聪明的服务器开发者会把ETags和GET请求的“If-None-Match”头一起使用,这样可利用客户端(例如浏览器)的缓存。因为服务器首先产生ETag,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存。
其过程如下:
        1.客户端请求一个页面(A)。
        2.服务器返回页面A,并在给A加上一个ETag。
        3.客户端展现该页面,并将页面连同ETag一起缓存。
        4.客户再次请求页面A,并将上次请求时服务器返回的ETag一起传递给服务器。
        5.服务器检查该ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304(未修改——Not Modified)和一个空的响应体。
 
 参考页面:http://www.kuqin.com/web/20080513/8442.html

博客已经搬家,请访问如下地址:http://www.czhphp.com

转载于:https://www.cnblogs.com/czh-liyu/archive/2011/06/22/2087113.html

If-Modified-Since If-None-Match相关推荐

  1. Android ContentProvider、ContentResolver和ContentObserver的使用

    1.ContentProvider.ContentResolver和ContentObserver ContentProvider是Android的四大组件之中的一个,可见它在Android中的作用非 ...

  2. C/C++怎样编写高质量的程序:头文件和源文件模板------高质量C++/C编程指南-第1章-文件结构

    http://www.bianceng.cn/Programming/cplus/200705/614.htm 高质量C++/C编程指南-第1章-文件结构 第1章 文件结构 每个C++/C程序通常分为 ...

  3. SAP ABAP实用技巧介绍系列之 ABAP XSLT match keyword

    Created by Jerry Wang, last modified on Jun 26, 2014 用于测试的xml: <catalog> <cd> <title& ...

  4. ngram语言模型—基于KneserNey及Modified Kneser Ney平滑

    ngram语言模型-基于Kneser Ney及Modified Kneser Ney平滑 预处理 NGram 建模 KneserNey 平滑 Modified Kneser Ney Smoothing ...

  5. 【3维视觉】一文带你学习网格细分Mesh Subdivision算法(Loop, Butterfly, Modified Butterfly, Catmull-Clark, Doo-Sabin)

    0.引言 介绍了Loop, Butterfly, Modified Butterfly, Catmull-Clark, Doo-Sabin等网格细分算法. 网格超分技术,换言之曲面细分,是指将一个模型 ...

  6. Not injecting HSTS header since it did not match the requestMatcher HSTS设置问题解决

    HSTS请求设置 错误描述:在使用文件上传功能时,form表单提交带有header数据的请求时遇到这个问题,报错如下: Not injecting HSTS header since it did n ...

  7. python中的match和search的区别

    对比 match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]): 这个方法将从string的pos下标处起尝试匹配patt ...

  8. Python中re的match、search、findall、finditer区别正则

    20210728 search 得到索引范围 原文地址: http://blog.csdn.net/djskl/article/details/44357389 这四个方法是从某个字符串中寻找特定子串 ...

  9. Linux那些事儿 之 戏说USB(大结局)还是那个match

    从上次在几米的向左走向右走遇到usb总线的那个match函数usb_device_match()开始到现在,遇到了设备,遇到了设备驱动,遇到了接口,也遇到了接口驱动,期间还多次遇到usb_device ...

  10. Error:CPACK_PACKAGE_VERSION does not match version provided by version.hpp header!

    环境:Cmake3.10+OpenCV2.4.13.5+CUDA9.2 Problem CMake Warning at cmake/OpenCVPackaging.cmake:23 (message ...

最新文章

  1. 读javascript高级程序设计11-事件
  2. Java中String 和StringBuffer的区别
  3. 鸿蒙系统和你,鸿蒙系统面世,但与您所想的不一样
  4. java 蓝桥杯算法训练 秘密行动
  5. 敏捷开发系列学习总结(16)——给Scrum Master的十个建议
  6. [P2396] yyy loves Maths VII
  7. jQuery—$ is not a function
  8. RAW-socket
  9. Android的Intent系统调用
  10. openwrt路由器完美破解成信宿舍校园网
  11. js获取本地文件(图片、word文档等)并获取其Base64化的编码,可用于本地文件上传至服务器
  12. ASP.NET 入门基础--搭建网站开发环境
  13. 商业化游戏服务器引擎自定义框架设计思路
  14. 【蓝桥杯省赛真题34】Scratch九宫格 少儿编程scratch蓝桥杯省赛真题讲解
  15. Hint: If you want to see a list of allocated tensors when OOM happens 的解决办法
  16. OkHttp简单封装
  17. 城阳区人才共有产权住房细则
  18. 云原生|kubernetes|etcd集群详细介绍+安装部署+调优
  19. win10网页找不到服务器dns,win10无法找到dns地址是怎么回事|win10无法找到dns地址如何解决...
  20. eclipse设置xml文件默认的打开方式为XML Editor

热门文章

  1. java画一个小车_小轿车简笔画怎么画
  2. 美式期权定价python_【定价】二叉树(CRR)欧式/美式期权定价的原理及Python实现...
  3. 图片生成html_markdown 生成头条文章的一个实现
  4. 只在用户登陆时运行_linux 系统的7个运行级别
  5. 对美食评语进行情感分析
  6. 特征工程(三):特征缩放,从词袋到 TF-IDF
  7. 在真实数据集上的随机森林模型参数调优
  8. nlp任务分类及适用方法
  9. 预印本(Preprint)及出版商的投稿政策
  10. c++ 拷贝构造函数 讲解