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 相应头相关相关推荐

  1. http状态码 以及请求响应头相关

    1xx消息[编辑] 这一类型的状态码,代表请求已被接受,需要继续处理.这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束.由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非 ...

  2. HTTP头相关的材料

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP 协议的详细内容请参 考RFC2616.HTTP协议采用了请求/响应模型. ...

  3. http请求头相关解释

    目录 1.请求头 2. network网络请求参数 1.请求头 如下,请求头如图: 对应解释: Accept: application/json, text/plain, */* 告诉服务器我可以接收 ...

  4. Windows Pe 第三章 PE头文件-EX-相关编程-1(PE头内容获取)

    获取pE头相关的内容,就是类似如下内容 原理:比较简单,直接读取PE到内存,然后直接强转就行了. #include <windows.h> #include <stdio.h> ...

  5. Jaxb对xml报文头的小修小改

    前言: 也是在实际工作中, 借助jaxb来实现xml到java对象的映射转换. 在实际应用中, 也遇到了一些有趣好玩的东西, 权当记录下来. 本文主要讲解jaxb如何生成约定的xml报文头的实现思路, ...

  6. 二、python框架相关知识体系

    Django框架 1.django框架.flask框架和Tornado框架的区别? django框架,内置组件多,自身功能强大,是一个大而全的框架,ORM.Admin.中间件.Form.ModelFr ...

  7. uber司机已经激活了,就是还没有上传头

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. Python网络相关面试题

    文章目录 1. 简述OSI七层模型以及列举各层协议 2. 简述三次握手和四次挥手 3. 简述TCP和UDP的区别 5. ARP协议 6. DNS解析解析流程 7. HTTP和HTTPS 8. 进程.线 ...

  9. Linux网络 IP/TCP校验和、checksum、伪首部相关问题

    1.校验和作用 校验和是为防止报文在信道传输出现误码导致报文错误,或者传输过程中间网络设备错误造成报文错误等,并不保证报文被他人恶意篡改.防君子不防小人,而已修改报文内容重新计算校验和是无法检测的. ...

最新文章

  1. 《树莓派渗透测试实战》——总结
  2. ASP.NET 程序中常用的三十三种代码(2)
  3. CMDB收集资产脚本
  4. Linux 源代码在线(http://lxr.linux.no/linux/)。
  5. 良好的代码编写风格(二十五条)
  6. MapReduce PLinq 简单示例
  7. STM32位带区和位带别名区的浅谈
  8. 对抗攻击之利用水印生成对抗样本
  9. SQLLite数据库操作
  10. 学习设计模式系列之一:单例模式
  11. 无监督学习:Linear Dimension Reduction(线性降维)
  12. FFMPEG ./configure 参数及意义
  13. 程序员的节日!干杯!
  14. 19年6月英语六级第二套听力单词
  15. Python3 - 苹果ID登录App Sign in with Apple
  16. OmniPlayer Pro for Mac(全能视频播放器)
  17. AirPlay掉帧、卡顿解决方法
  18. Linux内核调试方法
  19. jwplayer android m3u8,播放上jwplayer M3U8文件,而RTMP
  20. Python实现中英互译

热门文章

  1. 研究综述 | 多关系知识图谱表示学习综述
  2. 论文浅尝 - ESWA | 知识图谱的自动扩充方法
  3. 论文浅尝 | 从知识图谱流中学习时序规则
  4. Android官方开发文档Training系列课程中文版:连接无线设备之网络服务搜索功能
  5. Reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are
  6. 【HTML/CSS】display相关属性
  7. Git missing Change-Id in commit message footer解决方法
  8. QT QTransform与QMatrix 有啥区别?
  9. 如何阻止button默认的刷新页面操作
  10. 线上服务CPU100%问题快速定位实战