当 HTTP 请求包含 If-XXX 这种样式的首部时,服务器会对附带的条件进行判断,只有判断指定条件为真,才会执行请求。这样的请求首部有五个,分别是 If-Modified-Since、If-Unmodified-Since、If-Match、If-None-Match 和 If-Range。

If-Modified-Since

当使用 GET 方法请求服务器上的资源时指定了 If-Modified-Since 首部时,如果该资源在指定的日期时间之后未被修改过,服务器会回送一条 304 Not Modified 响应,而不会回送此资源。如果对象被修改过,服务器就会像对待非条件 GET 请求一样响应。

a) 资源在指定的日期时间之后未被修改过

[huey@huey-K42JE ~]$ curl -I -H "If-Modified-Since: Fri, 09 Aug 2013 23:54:35 GMT" http://common.cnblogs.com/script/jquery.js
HTTP/1.1 304 Not Modified
Date: Tue, 08 Sep 2015 06:38:40 GMT
Connection: keep-alive
Cache-Control: public,max-age=25920000
Accept-Ranges: bytes
ETag: "7468b58329bce1:0"

b) 资源在指定的日期时间之后被修改过

[huey@huey-K42JE ~]$ curl -I -H "If-Modified-Since: Fri, 15 Feb 2013 03:00:00 GMT" http://common.cnblogs.com/script/jquery.js
HTTP/1.1 200 OK
Date: Tue, 08 Sep 2015 06:43:02 GMT
Content-Type: application/javascript
Content-Length: 94020
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: public,max-age=25920000
Last-Modified: Fri, 15 Feb 2013 03:06:57 GMT
Accept-Ranges: bytes
ETag: "7468b58329bce1:0"

If-Unmodified-Since

If-Unmodified-Since 首部的作用与 If-Modified-Since 首部的作用相反。当使用 GET 方法请求服务器上的资源时指定了 If-Unmodified-Since 首部时,如果该资源在指定的日期时间之后被修改过,服务器会回送一条 412 Precondition Failed 响应,而不会回送此资源。如果对象未被修改过,服务器就会像对待非条件 GET 请求一样响应。

a) 资源在指定的日期时间之后未被修改

[huey@huey-K42JE ~]$ curl -I -H "If-Unmodified-Since: Fri, 09 Aug 2013 23:54:35 GMT" http://common.cnblogs.com/script/jquery.js
HTTP/1.1 200 OK
Date: Tue, 08 Sep 2015 06:49:51 GMT
Content-Type: application/javascript
Content-Length: 94020
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: public,max-age=25920000
Last-Modified: Fri, 15 Feb 2013 03:06:57 GMT
Accept-Ranges: bytes
ETag: "7468b58329bce1:0"

b) 资源在指定的日期时间之后被修改过

[huey@huey-K42JE ~]$ curl -I -H "If-Unmodified-Since: Fri, 15 Feb 2013 03:00:00 GMT" http://common.cnblogs.com/script/jquery.js
HTTP/1.1 412 Precondition Failed
Date: Tue, 08 Sep 2015 06:50:12 GMT
Content-Type: text/html
Content-Length: 1333
Connection: keep-alive
Cache-Control: public,max-age=25920000
Last-Modified: Fri, 15 Feb 2013 03:06:57 GMT
Accept-Ranges: bytes
ETag: "7468b58329bce1:0"

If-Match

当使用 GET 方法请求服务器上的资源时指定了 If-Match 首部时,只有该资源的 ETag 值与指定的值一致,服务器才会执行请求。否则,服务器会回送一条 412 Precondition Failed 响应。还可以使用星号(*)指定 If-Match 的字段值,服务器将会忽略 ETag 的值,只要资源存在就处理请求。

a) 资源的 ETag 值与 If-Match 指定的值一致

[huey@huey-K42JE ~]$ curl -I -H 'If-Match: "7468b58329bce1:0"' http://common.cnblogs.com/script/jquery.js
HTTP/1.1 200 OK
Date: Tue, 08 Sep 2015 07:42:40 GMT
Content-Type: application/javascript
Content-Length: 94020
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: public,max-age=25920000
Last-Modified: Fri, 15 Feb 2013 03:06:57 GMT
Accept-Ranges: bytes
ETag: "7468b58329bce1:0"

b) 资源的 ETag 值与 If-Match 指定的值不一致

[huey@huey-K42JE ~]$ curl -I -H 'If-Match: "7468b58329bce2:0"' http://common.cnblogs.com/script/jquery.js
HTTP/1.1 412 Precondition Failed
Date: Tue, 08 Sep 2015 07:43:32 GMT
Content-Type: text/html
Content-Length: 1333
Connection: keep-alive
Cache-Control: public,max-age=25920000
Last-Modified: Fri, 15 Feb 2013 03:06:57 GMT
Accept-Ranges: bytes
ETag: "7468b58329bce1:0"

c) 使用星号(*)指定 If-Match 的字段值

[huey@huey-K42JE ~]$ curl -I -H 'If-Match: *' http://common.cnblogs.com/script/jquery.js
HTTP/1.1 200 OK
Date: Tue, 08 Sep 2015 07:44:00 GMT
Content-Type: application/javascript
Content-Length: 94020
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: public,max-age=25920000
Last-Modified: Fri, 15 Feb 2013 03:06:57 GMT
Accept-Ranges: bytes
ETag: "7468b58329bce1:0"

If-None-Match

If-None-Match 首部的作用与 If-Match 首部一致。当使用 GET 方法请求服务器上的资源时指定了 If-None-Match 首部时,只有该资源的 ETag 值与指定的值不一致,服务器才会执行请求。否则,服务器会回送一条 304 Not Modified 响应。

a) 资源的 ETag 值与 If-None-Match 指定的值一致

[huey@huey-K42JE ~]$ curl -I -H 'If-None-Match: "7468b58329bce1:0"' http://common.cnblogs.com/script/jquery.js
HTTP/1.1 304 Not Modified
Date: Tue, 08 Sep 2015 09:02:56 GMT
Connection: keep-alive
Cache-Control: public,max-age=25920000
Accept-Ranges: bytes
ETag: "7468b58329bce1:0"

b) 资源的 ETag 值与 If-None-Match 指定的值不一致

[huey@huey-K42JE ~]$ curl -I -H 'If-None-Match: "7468b58329bce2:0"' http://common.cnblogs.com/script/jquery.js
HTTP/1.1 200 OK
Date: Tue, 08 Sep 2015 09:04:31 GMT
Content-Type: application/javascript
Content-Length: 94020
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: public,max-age=25920000
Last-Modified: Fri, 15 Feb 2013 03:06:57 GMT
Accept-Ranges: bytes
ETag: "7468b58329bce1:0"

If-Range

当使用 GET 方法请求服务器上的资源时指定了 If-Range 首部时,如果该资源的 ETag 值或时间与指定的值相一致,则作为范围请求处理。反之,则返回整个资源。

HTTP - 条件请求的更多相关文章

  1. ASP.NET Core应用针对静态文件请求的处理[2]: 条件请求与区间请求

    通过调用ApplicationBuilder的扩展方法UseStaticFiles注册的StaticFileMiddleware中间件帮助我们处理针对文件的请求.对于StaticFileMiddlew ...

  2. ASP.NET Core应用针对静态文件请求的处理[5]: DefaultFilesMiddleware中间件如何显示默认页面

    DefaultFilesMiddleware中间件的目的在于将目标目录下的默认文件作为响应内容.我们知道,如果直接请求的就是这个默认文件,那么前面介绍的StaticFileMiddleware中间件会 ...

  3. ASP.NET Core应用针对静态文件请求的处理[4]: DirectoryBrowserMiddleware中间件如何呈现目录结构

    和StaticFileMiddleware中间件一样,DirectoryBrowserMiddleware中间本质上还是定义了一个请求地址与某个物理目录之间的映射关系,而目标目录体现为一个FilePr ...

  4. ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求

    我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...

  5. ASP.NET Core应用针对静态文件请求的处理[1]: 以Web的形式发布静态文件

    虽然ASP.NET Core是一款"动态"的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件.CSS样式文件和图片文件 ...

  6. http协议(八)请求首部字段

    请求首部字段 定义:请求首部字段是从客户端到服务器发送请求报文中所使用的字段,里面包含了附加信息.客户端信息以及对响应内容相关的优先级等内容 1.Accept 通知服务器用户代理可处理的媒体类型及媒体 ...

  7. StaticFileMiddleware中间件如何处理针对文件请求

    StaticFileMiddleware中间件如何处理针对文件请求 我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的 ...

  8. dhtmlxGrid分页查询,条件查询实例

    使用jquery的ajax get将页面条件请求到后台,取得数据库数据,分页查询,返回前台grid中. 引入所需文件: <script>window.dhx_globalImgPath = ...

  9. C#HttpWebResponse请求常见的状态码

    成员名称 说明 Continue 等效于 HTTP 状态 100.Continue 指示客户端可能继续其请求. SwitchingProtocols 等效于 HTTP 状态 101.Switching ...

随机推荐

  1. 校园网通过路由器开WiFi

    闲话少说,为了在一个宿舍内达到一个网口N人上网目的,特地写一篇关于校园网通过路由器开wifi的文章,希望能帮助同学把wifi开起来,请看正文(操作以下步骤前建议先重置路由,也就是初始化复位): 一.一 ...

  2. 剑指OFFER之矩形覆盖(九度OJ1390)

    题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入 ...

  3. http请求中乱码------编码的转换

    在http请求中如果包含了汉字,那么就会出现乱码,引文默认的编码是ISO的,为了正常的显示,需要将编码转化为UTF或者gbk,下面提供一个辅助类. import java.io.Unsupported ...

  4. MySQL 5.5 手册下载

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. cocos2d 制作动态光晕效果基础 —— blendFunc

    转自:http://blog.csdn.net/yang3wei/article/details/7795764 最近的项目要求动态光晕的效果. 何谓动态光晕?之前不知道别人怎么称呼这个效果, 不过在 ...

  6. mysql 找不到或无法加载已注册的 .Net Framework Data Provider

    需要安装 mysql-connector-net-6.7.4.msi 在C盘安装mysql的位置找到三个DLL,复制到Bin文件夹下 在C:\Windows\Microsoft.NET\Framewo ...

  7. C#程序实现动态调用DLL的研究[转]

    摘   要: 在< csdn 开发高手> 2004 年第 03 期中的<化功大法——将 DLL 嵌入 EXE >一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在 ...

  8. 浅谈Java对象回收的三种方式

    半夜睡不着,加上最近在看Java虚拟机,写点给新手和自己看的东西. 第一类:生命周期中止 void scope(){ Test t = new Test(); } 第二类:对象无引用 (一).对象的应 ...

  9. Android之使用AchartEngineActivity引擎绘制柱状图、曲线图

    1.简介 AChartEngine(简称ACE)是Google的一个开源图表库(for Android).它功能强大,支持散点图.折线 .关于里面类的具体使用,请下载响应的文档说明(主页上有). 2. ...

  10. inux2.6.xx内核代码分析( 72节)

    http://blog.csdn.net/ustc_dylan/article/category/469214