zoukankan      html  css  js  c++  java
  • HTTP

    当 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 值或时间与指定的值相一致,则作为范围请求处理。反之,则返回整个资源。

  • 相关阅读:
    学习Java的知识体系路线(详细完整版,附图加目录)
    数组的定义和使用,理解多维数组和Array类
    Java运算符使用总结(重点:自增自减、位运算和逻辑运算)
    Java常用修饰符总结
    实例/静态变量、局部变量和常量的定义及其作用域
    Nothing is impossible
    科班学习java遇到瓶颈,每天云里雾里怎么办?
    人生路漫漫,相见不如不见
    基于视频的车辆识别
    编译原理课后习题答案令A,B和C是任意正规式,证明以下关系成立(A|B)*=(A*B*)*=(A*|B*)*
  • 原文地址:https://www.cnblogs.com/huey/p/4791670.html
Copyright © 2011-2022 走看看