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)和一个空的响应体。

转载于:https://www.cnblogs.com/huenchao/p/6104709.html

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

  1. jquery2.0.3 全部源码

    /*!* Includes Sizzle.js 选择器,独立的库* http://sizzlejs.com/*/ (function( window, undefined ) { //"us ...

  2. (OPN)Onion Peel Networks for Deep Video Completion

    文章地址:https://arxiv.org/abs/1908.08718 代码地址:GitHub - seoungwugoh/opn-demo: Onion-Peel Networks for De ...

  3. Paros工具使用手册

    Paros介绍 Paros是一种利用纯java语言开发的安全漏洞扫描工具,它主要是为了满足那些需要对自己的web应用程序进行安全检测的应用者而设计的.通过Paros的本地代理,所有在客户端与服务器端之 ...

  4. Nginx Proxy Cache原理和最佳实践

    1 缓存概念 nginx缓存原理 当第一个用户(蓝)访问网站,他的请求首先会到NGINX PROXY SERVER,随后NGNIX发往后端服务器(灰),后端会将请求的响应首先发往NGINX,由其返回给 ...

  5. Onion-Peel Networks for Deep Video Completion

    论文地址 github地址 文章目录 总述 网络结构 训练 推理阶段 实验 总述 ICCV 2019的文章,提出OPN网络(Onion-Peel Network)去解决video inpainting ...

  6. JQuery中的动画效果

    show() hide() slideUp slideDown fadeIn fadeOut animate : 自定义动画 JQuery中的动画效果.html <!DOCTYPE html&g ...

  7. XPT2046 触摸校正

    rduino IDE下载:XPT2046_TouchScreen库. #define TOUCH_CS_PIN 33 #define TOUCH_IRQ_PIN 34 触摸参数需要调校: 打开示例:G ...

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

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

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

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

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

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

最新文章

  1. 《C++ Primer plus》学习笔记之”RTTI”
  2. Spring Cloud(二) 配置Eureka Client
  3. Redis的主从复制是如何做的?复制过程中也会产生各种问题
  4. 用计算器计算“异或CRC”
  5. java canvas 缩放图片_java-GWT:放大和缩小画布绘图
  6. WebDriverException: Cannot find firefox binary in PATH.的解决方法
  7. 下载网络图片显示在Android手机上
  8. 显示图片_Pycharm图片独立显示与imshow()无法显示
  9. java实现计算器_初学JAVA之实现计算器
  10. devexpress gridview属性详细(全部属性以及常用属性)
  11. MFC仿QQ好友列表控件
  12. 练习华为大型公司网络构建拓扑图
  13. 【Python】python中[-1]、[:-1]、[::-1]、[n::-1]使用方法;random.choice()
  14. iOS 音乐播放器(二)
  15. forum.anywlan.com.php,一句话让您理解WDS和WISP的区别/多数WISP路由器的简单有效的通用设置方法...
  16. 【OpenCV】 ⚠️实战⚠️ 银行卡卡号读取 ☢️建议手收藏☢️
  17. java黄金分割_黄金分式与黄金分割数(Java实现)
  18. 传奇服务器开区修改,怎么修改传奇登陆器开区时间提前?
  19. 学习周记1:2019.2.18-2019.2.24
  20. python笔迹识别_python_基于KNN算法的笔迹识别

热门文章

  1. Java:代码验证 StringBuffer 线程安全,StringBuilder 非线程安全
  2. java虚拟机内存监控_java虚拟机内存监控工具
  3. knn计算机在图片中的应用,图像分类和kNN
  4. android短信发送乱码,解决CEMAPI发送中文短信时会乱码
  5. 上海中学生的科技活动小论文集锦
  6. 方向控制中的动态比例值-P
  7. 2020年春季学期信号与系统课程作业参考答案-第十三次作业
  8. 对示波器测量正弦波幅值和相位仿真实验
  9. PHP solr服务器搭建,搜索方案 solr+php如何安装配置?
  10. html文字随机变色效果,html肿么让字体得到随机颜色