当 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. MES生产日报存储过程

    USE [ScreenMonitor]GO/****** Object: StoredProcedure [dbo].[ImportProductForDay] Script Date: 04/11/ ...

  2. Cygwin解决Windows远程登录linux服务器

    下载地址http://www.cygwin.com/install.html 选择mirror.htnshost.com网站下载的比较快. 安装Cygwin(/X)需要选择的包: openssh(必选 ...

  3. Java中反射的三种常用方式

    Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...

  4. HDU 4122 Alice's mooncake shop 单调队列优化dp

    Alice's mooncake shop Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem ...

  5. Codeforces Gym 100570 E. Palindrome Query Manacher

    E. Palindrome QueryTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100570/pro ...

  6. SpringMVC4.2.4 xml配置

    环境:1.基于spring4.2.4版本,也是spring当前(2016.2)最新的GA版本 2.maven 3.2.1 3.jdk1.7 xml配置1: web.xml <?xml versi ...

  7. 2013年中国区Skyline软件价格体系

    < 2013年中国区Skyline软件价格体系                         序号 产品名称 描述 市场报价         1 TerraExplorer Pro 5.1 对 ...

  8. X64 Win7(win2008)连接SqlServer2005慢的解决办法

    问题描述:数据库版本:SQL SERVER 2005数据库安装环境: Win 2003 X64 客户端环境:Win 2008 x64连接工具:ODBC或ado.net测试连接时间:4-6秒 客户端环境 ...

  9. Ubuntu下多服务器 Rsync同步镜像服务配置

    主服务器:192.168.5.13_ubuntu 从服务器:192.168.5.11_centos ================== 1> 在两台主机上分别安装rsync========== ...

  10. WIN8重见开始菜单

    从win7进入win8感觉不适应,做为一个程序开发人员,更觉得不爽,因此想着如何恢复开始菜单,查了很多文章终于找到方法 首先,在桌面版Windows 8启动资源管理器,单击工具栏上的“查看”选项卡后, ...