但只有将另一个名为ServeUnknownFileTypes的属性设置为True,中间件才会采用这个默认设置的媒体类型。...条件请求解析:获取与条件请求相关的4个报头(If-Match、If-None-Match、If-Modified-Since和If-Unmodified-Since)的值,根据HTTP规范计算出最终的条件状态...如果将请求报头If-None-Match的值与当前文件标签进行比较,或者将请求报头If-Modified-Since的值与文件最后修改时间进行比较确定目标文件不曾被更新,检验结果对应的枚举值为NotModified...,反之则对应的枚举值为ShouldProcess。...条件请求解析 如果目标文件当前的状态不满足If-Match报头或者If-Unmodified-Since报头表示的条件,那么检验结果对应的枚举值为PreconditionFailed;反之,对应的枚举值为
deny node [ID] #创建一个叫NAME的节点,设置节点的规则默认为放行/拒绝 节点为[ID] [节点内]if-match ip address prefix-list/acl [rule-id...] [节点内]apply cost 100 [节点内]apply #进行节点判断,如果ip address匹配地址前缀列表[rule-id]的规则 #更改cost值为100 #打上一个为20的tag route-polocy...[Name] deny/permit node [ID] #如果一个节点内没有任何子节点比如if-match等,就是空节点,那么他默认匹配所有,不做任何处理, 路由策略的一些注意事项 route-policy...用于路由过滤,则不用配置空节点 route-policy仅用于路由器属性的修改,则需要配置空节点,来方向其他所有路由 关于route-policy能够配置的位置 IGP路由引入时 BGP路由宣告时 BGP...路由引入的方向 单向引入 双向引入 路由引入的问题 不同协议的度量值不同,引入后的cost值默认重置为1 ,不会保留原有cost 多边界双向引入会导致环路路由的形成,解决办法: 使用路由策略,对引入的路由加上
[源代码从这里下载] 一、HTTP对条件更新的支持 HTTP为条件更新提供了相应的报头,我们按照分析条件获取的方式来分析条件更新在HTTP请求/回复过程中的实现。...而之前获取的ETag指将会作为请求消息的If-Match报头。 服务端接收到资源修改/删除请求后先获取到现有的资源的ETag值,并将此值与请求消息的If-Match报头值进行比较。...如果两者不一致,则表明试图被修改/删除的资源已经被修改了,在这种情况下会直接回复一个HTTP状态为“412 (Precondition Failed)”的空消息。...的请求,如果If-Match报头值不为“*”,则直接抛出HTTP状态为PreconditionFailed的WebFaultException异常;对于HTTP方法为POST和DELETE的请求来说,如果...If-Match报头值为“*”或者包含指定的entityTag则验证通过,否则同样则直接抛出HTTP状态为PreconditionFailed的WebFaultException异常。
条件请求解析:获取与条件请求相关的四个报头(If-Match、If-None-Match、If-Modified-Since和If-Unmodified-Since)的值,根据HTTP规范计算出最终的条件状态...如果将请求报头If-None-Match的值与当前文件签名进行比较,或者将请求If-Modified-Since报头的值与文件最后修改时间进行比较确定目标文件不曾改变,检验结果对应的枚举值为NotModified...,反之对应的枚举值为ShouldProcess。...如果目标文件当前的状态不满足If-Match或者If-Unmodified-Since报头表示的条件,检验结果对应的枚举值为PreconditionFailed,反之对应的枚举值为ShouldProcess...如果集合为空,表示设置的区间不符合要求。 实现在SendResponseAsync方法中针对请求的处理不外乎指定响应状态码、设置响应报头和写入响应主体内。
用 chrome 打开网站; 打开开发者工具(windows快捷键Control+Shift+J、Mac快捷键Command+Option+J); 下图中的 disk cache 和 memory...[查看服务器对资源缓存的设置?] --- 二、缓存更新 1、触发缓存的验证请求 资源被更新了,浏览器也必须重新获取资源,才能显示最新版本的网站。...大于 响应头 Expires 的时间,需要验证; 缓存再本地保存时长 超过 Cache-Control 中 max-age 、s-maxage 的时长,需要验证; Cache-Control 被设置为...单个请求可包含多个指令,用逗号隔开,指令不区分大小写但建议小写。详细用法,看这里!...If-Match、If-None-Match :用作确定资源 存在或不存在 ?
If-Match 形如 If-xxx 这种样式的请求首部字段,都可称为条件请求。服务器接 收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。...首部字段 If-Match,属附带条件之一,它会告知服务器匹配资源所用 的实体标记(ETag)值。这时的服务器无法使用弱 ETag 值。...还可以使用星号(*)指定 If-Match 的字段值。针对这种情况,服务 器将会忽略 ETag 的值,只要资源存在就处理请求。 10....字段值 的单位为秒。 若创建该响应的服务器是缓存服务器,Age 值是指缓存后的响应再次 发起认证到认证完成的时间值。代理创建响应时必须加上首部字段 Age。 13....几乎所有的浏览器在接收到包含首部字段 Location 的响应后,都会强 制性地尝试对已提示的重定向资源的访问。 15.
协商缓存 所谓“协商”,可以理解为:客户端和服务端双方商量着来。...304状态码返回时,不包含任何响应的主体部分。...If-Match 与412 状态码 用法和规则基本同If-None-Match,但判断逻辑完全相反。...If-Match的这个条件的判断逻辑是:只有当 If-Match 的字段值跟 ETag 值匹配一致时才会命中协商缓存。服务器才会接受请求 并返回200和新数据。...还可以使用 星号(*) 指定 If-Match 的字段值。 针对这种情况,服务器将会忽略 ETag 的值,只要资源存在就处理请求。
它和 Etag 是一对,它俩用来做对比; 除了头部,有些状态码与缓存也有些关系: 200 则表示为成功。一个包含例如 HTML 文档,图片,或者文件的响应。...ETag 值做对比,如果两个值不相同,就返回资源内容和新的 Etag 值,响应码为200;如果值相同,说明资源还没更新,就返回 304 状态码。...除了上面用于缓存的 If-Modified-Since 和 If-None-Match 两个条件请求之外,还有三个常见的条件请求: If-Match 在请求方法为 GET 和 HEAD 的情况下,它的值与...这样可以保证新请求的范围与之前请求的范围是对同一份资源的请求,如果 ETag 与 If-Match 值不一致,说明不是同一份资源,或者这个资源已经被修改。...If-Match 的值还可以是星号*,这表示服务器会忽略 ETag 的值,只要资源存在就处理请求。带有 If-Match 请求头时,服务器是无法使用弱ETag值的。
403 Forbidden : 服务器拒绝执行 404 Not Found : 找不到目标资源 405 Method Not Allowed : 不允许执行目标方法,响应中应该带有 Allow 头,内容为对该资源有效的...HTTP 方法 406 Not Acceptable : 服务器不支持客户端请求的内容格式,但响应里会包含服务端能够给出的格式的数据,并在 Content-Type 中声明格式名称 410 Gone...If-Unmodified-Since 或者 If-Match 头与服务器记录的实际修改时间或 ETag 值不匹配的时候,返回状态码 412 Precondition Failed 客户端发起的请求提供的...If-Unmodified-Since 或者 If-Match 头与服务器记录的实际修改时间或 ETag 的历史值匹配,但资源已经被修改过的时候,返回状态码 409 Conflict 客户端发起的请求提供的条件符合实际值...,那就更新资源,响应 200 OK 或者 204 No Content ,并且包含更新过的 Last-Modified 和/或 ETag 头,同时包含 Content-Location 头,其值为更新后的资源
2.REST和 ETag 来自Spring官方文档中对ETag特性的描述: ETag(实体标签)是由符合HTTP/1.1的Web服务器返回的HTTP响应头,用于检查给定URL的返回值是否发生变化。...3.使用 curl来验证ETag功能 一个通过客户端和服务器通信来简单地测试ETag特性的操作可以分解为以下步骤: – 首先,客户端发起一个对REST API的调用——响应包括了需要存储的ETag头,以便进一步使用...5.测试ETag 那就开始吧——在检索一个资源时,我们需要验证返回的响应体将包含一个“ETag”头。...更新上一步返回的资源 发送一个新的检索请求,这次使用 “If-None-Match”头携带上一步返回的ETag值 在这第二次请求中,服务器将返回一个200 OK和完整的资源,这是因为此时资源已经更新但请求携带的...() == 412); } 操作步骤: 首先创建资源 然后使用指定了错误ETag值的“If-Match”头检索资源——这是一个有条件的GET请求 服务器将返回一个412 未满足先决条件 6.ETag的其它用武之地
这时,会在字段值最开始处附加 W/ ETag: W/"1234" 请求首部字段If-Match If-None-Match If-Range 形如 If-xxx 这种样式的请求首部字段,都可称为条件请求...服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。 If-Match ,它会告知服务器匹配资源所用的实体标记( ETag )值。这时的服务器无法使用弱 ETag 值。...服务器会比对 比If-Match 的字段值和资源的 ETag 值,仅当两者一致时,才会执行请求。反之,则返回状态码 412 Precondition Failed 的响应。...还可以使用星号( * )指定 If-Match 的字段值。针对这种情况,服务器将会忽略 ETag 的值,只要资源存在就处理请求。 ?...这种场景下所常用的HTTP头部字段是包含上述访问大数据(图片,视频,大文件)时的请求字段的,这些首部字段各有含义,见HTTP Headers HTTP不能做到什么(缺陷) 一条连接上只可发送一个请求。
如果服务器中返回的响应包含 no-cache 指令,那么缓存服务器不能对资源进行缓存。源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作。...Host 首部字段是 HTTP/1.1 规范内唯一一个必须被包含在请求内的首部字段。 若服务器未设定主机名,那直接发送一个空值即可 Host: 。...5.9 If-Match 形如 If-xxx 这种样式的请求首部字段,都可称为条件请求。服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。...If-Match: "123456" 首部字段 If-Match,属附带条件之一,它会告知服务器匹配资源所用的实体标记(ETag)值。这时的服务器无法使用弱 ETag 值。...几乎所有的浏览器在接收到包含首部字段 Location 的响应后,都会强制性地尝试对已提示的重定向资源的访问。
当缓存的响应中出现max-age cache-control指令时,如果当前时间大于对该资源的新请求时给出的时间值(以秒为单位),则响应就失效了。...缓存可以配置为在不进行验证的情况下返回过时的响应,但前提是这与缓存验证的任何“必须”级别需求(例如,“必须重新验证”cache-control指令)不冲突。 ...如果所请求的URI不包括所请求服务的Internet主机名,则必须给Host头字段一个空值。HTTP/1.1代理必须确保它转发的任何请求信息中都包含适当的HOST头字段,该字段标识代理请求的服务。...更新资源(例如PUT)的请求可能包含if-match头字段,以表示如果与if-match值(单个实体标记)对应的实体不再是该资源的表示,则不得应用请求方法。...如果TE字段值为空或不存在TE字段,则唯一的传输编码是“chunked”。没有传输编码的消息总是可以接受的。
If-Match 标头,其中包含 Etag 值以检查有效性。...此外,设置了非标准请求头 X-PINGOTHER ,这个标头不是 HTTP/1.1 的一部分,但通常对 Web 程序很有用。...最后,Access-Control-Max-Age 以秒为单位给出一个值,这个值表示对预检请求的响应可以缓存多长时间,在此期间内无需发送其他预检请求。...对于其他方法,特别是 PUT 方法,If-Match 可以防止丢失更新,服务器会比对 If-Match 的字段值和资源的 Etag 值,仅当两者一致时,才会执行请求。...但是,一旦缓存过期,客户端不会直接使用缓存的值,而是发出条件请求。验证器的值用作 If-Modified-Since 和If-Match标头的参数。
它们是: If-Match如果远端资源的实体标签与在 [ETag] 这个首部中列出的值相同的话,表示条件匹配成功。默认地,除非实体标签带有 'W/' 前缀,否者它将会执行强验证。...[If-Range] 与 [If-Match] 或 [If-Unmodified-Since] 相似,但是只能含有一个实体标签或者日期值。...假如缓存为空,或者是没有缓存的话,被请求资源会以状态码 200 OK 返回。 验证器会同资源一起返回,它们出现在首部字段中。...验证器的值会用作 [If-Modified-Since]和 [If-Match] 首部字段的参数。 假如资源未发生变化,服务器就返回状态码为 [304] Not Modified 的响应。...为了防止这种情况的发生,可以使用条件式请求:添加 If-None-Match 首部,并将其值设置为'*', 表示任意实体标签。
虽然内部领域的读取模型(read model)包含了版本号,但如果将某个数值类型的版本号直接作为ETag会产生安全性问题,因为客户端可以轻易地猜出下一个数值。...另一方面,当API层对条件式GET请求进行响应时,会将生成的ETag与客户端在If-None-Match头中传入的值进行比较。...HTTP通过If-Unmodified-Since和If-Match提供了对资源进行并发修改时的保护机制。...如你所见,ETag的值仅仅是对领域模型中版本号的一种表现,但我们对其进行加密以满足HTTP规格的需要。服务端获取到这个值之后进行解密并还原成版本号的数值。...可选的并发检查 在m-r最初的实现中,所有命令(除了CreateInventoryItemCommand,它已经隐式地包含了值为0的版本号)都包含一个整数型的CurrentVersion字段。
上图用例中,首部字段 Upgrade 指定的值为 TLS/1.0。请注意此处两个字段首部字段的对应关系,Connection 的值被指定为 Upgrade。...If-Match If-Match 后面可以跟一大堆属性,形式像 If-Match 这种的请求头称为条件请求,服务器接收到条件请求后,需要判定条件请求是否满足,只有条件请求为真,才会执行条件请求 类似的还有...对于其他方法,特别是 PUT 方法,If-Match 可以防止丢失更新,服务器会比对 If-Match 的字段值和资源的 ETag 值,仅当两者一致时,才会执行请求。...由于当 Max-Forwards 字段值为 0 时,服务器就会立即返回响应,由此我们至少可以对以那台服务器为终点的传输路径的通信状况有所把握。...源服务器不希望缓存服务器对资源缓存时,最好在 Expires 字段内写入与首部字段 Date 相同的时间值。
有时候,在空字典中添加键—值对是为了方便,而有时候必须这样做。为此,可先使用一对 空的花括号定义一个字典,再分行添加各个键—值对。...在if语句中将列表名用在条件表达式中时,Python将在列表 至少包含一个元素时返回True,并在列表为空时返回False。...这将返回字典alien_0中与键'color'相关联的值: green 字典中可包含任意数量的键—值对。...在处, 我们在这个字典中新增了一个键—值对,其中的键为'x_position',而值为0。在处,我们重 复这样的操作,但使用的键为'y_position'。...6.2.3 先创建一个空字典 有时候,在空字典中添加键—值对是为了方便,而有时候必须这样做。为此,可先使用一对 空的花括号定义一个字典,再分行添加各个键—值对。
领取专属 10元无门槛券
手把手带您无忧上云