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

  • 相关阅读:
    Android开发学习之路-使用Handler和Message更新UI
    Android开发学习之路-Service和Activity的通信
    Android开发学习之路-自定义ListView(继承BaseAdapter)
    URI、URL、URN
    理解 node.js 的事件循环
    创建hexo风格的markdown页面
    heroku
    js通过沿着作用域链还是原型链查找变量
    浏览器中实现3D全景浏览
    数据可视化图表ECharts
  • 原文地址:https://www.cnblogs.com/huey/p/4791670.html
Copyright © 2011-2022 走看看