HTTP的请求头 Last-Modified 与 If-Modified-Since 和 If-None-Match 与 ETags

Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 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://li-bonan.blog.163.com/blog/static/135564770201291725720582/

http://tech.ddvip.com/2010-03/1269412477148135.html

时间: 2024-09-20 04:25:21

HTTP的请求头 Last-Modified 与 If-Modified-Since 和 If-None-Match 与 ETags的相关文章

五、读取HTTP请求头

请求 5.1 HTTP请求头概述 HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST).如有必要,客户程序还可以选择发送其他的请求头.大多数请求头并不是必需的,但Content-Length除外.对于POST请求来说Content-Length必须出现. 下面是一些最常见的请求头: Accept:浏览器可接受的MIME类型. Accept-Charset:浏览器可接受的字符集. Accept-Encoding:浏览器能够进行解码的数据编码方式,比如g

jsp Servlet基础入门学习:读取HTTP请求头

js|servlet|请求     5.1 HTTP请求头概述 HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST).如有必要,客户程序还可以选择发送其他的请求头.大多数请求头并不是必需的,但Content-Length除外.对于POST请求来说Content-Length必须出现. 下面是一些最常见的请求头: Accept:浏览器可接受的MIME类型. Accept-Charset:浏览器可接受的字符集. Accept-Encoding:浏览器能够

JSP 读取HTTP请求头

js|请求 5.1 HTTP请求头概述 HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST).如有必要,客户程序还可以选择发送其他的请求头.大多数请求头并不是必需的,但Content-Length除外.对于POST请求来说Content-Length必须出现. 下面是一些最常见的请求头: Accept:浏览器可接受的MIME类型. Accept-Charset:浏览器可接受的字符集. Accept-Encoding:浏览器能够进行解码的数据编码方式,

读取HTTP请求头

HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST).如有必要,客户程序还可以选择发送其他的请求头.大多数请求头并不是必需的,但Content-Length除外.对于POST请求来说Content-Length必须出现. 下面是一些最常见的请求头: Accept:浏览器可接受的MIME类型. Accept-Charset:浏览器可接受的字符集. Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip.Servlet能够向支持g

[转]HTTP协议及其请求头分析

众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对应着不同的应用.    WWW 服务器使用的主要协议是HTTP协议,即超文体传输协议.由于HTTP协议支持的服务不限于WWW,还可以是其它服务,因而HTTP协议允许用 户在统一的界面下,采用不同的协议访问不同的服务,如FTP.Archie.SMTP.NNTP等.另外,HTTP协议还可用于名字服务器和分布式对象管 理.    HTTP的早期

五、读取HTTP请求头_JSP编程

5.1 HTTP请求头概述 HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST).如有必要,客户程序还可以选择发送其他的请求头.大多数请求头并不是必需的,但Content-Length除外.对于POST请求来说Content-Length必须出现. 下面是一些最常见的请求头: Accept:浏览器可接受的MIME类型. Accept-Charset:浏览器可接受的字符集. Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip

安卓 应用开发-安卓中如何获取http请求头?

问题描述 安卓中如何获取http请求头? 如题,最近在整免流.求大神解答如何用代码获取http请求头.............. 解决方案 HttpClient工具提供了设置和获取请求.响应头的方法的,详细参考:http://blog.csdn.net/z69183787/article/details/42966829 解决方案二: 例子: public void run() {7 //用HttpClient发送请求,分为五步8 HttpClient httpCient = new Defau

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

一直以来没有留意过HTTP请求头的IMS(If-Modified-Since)标签. 最近在分析Squid的access.log日志文件时,发现了一个现象. 就是即使是对同一个文件进行HTTP请求,第一次和第二次产生的网络流量数据也是不一致的. 在调查的过程中,逐渐了解了HTTP的If-Modified-Since的头标签的作用. 大家都知道客户端浏览器是有缓存的,里面存放之前访问过的一些网页文件. 例如IE,会把缓存文件存到"C:\Documents and Settings\zh2000g\

判断请求头中是否含有某属性来判断是否是ajax请求

 本文为大家介绍下如何判断请求头中是否含有某属性来判断是否时ajax请求,具体示例如下 代码如下: <html>  <head>  <script language="javascript">    function cl()  {  var xmlhttp;    if (window.XMLHttpRequest)  {  xmlhttp=new XMLHttpRequest();  }  else  {  xmlhttp=new ActiveX

Ajax之X-Requested-With请求头

             X-Requested-With请求头用于在服务器端判断request来自Ajax请求还是传统请求. 两种请求在请求的Header不同,Ajax 异步请求比传统的同步请求多了一个头参数        1  传统同步请求参数 accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 accept-charset  gb2312,utf-8;q=0.7,*;q=0.7 accept-enc