【ASP.NET MVC系列】浅谈缓存技术在ASP.NET中的运用

图片 1

  HTTP报文分为二种,HTTP请求报文跟HTTP响应报文。

【01】浅谈Google
Chrome浏览器(理论篇)

  HTTP请求报文的社团如下:

【02】浅谈Google
Chrome浏览器(操作篇)(上)

图片 2

【03】浅谈Google
Chrome浏览器(操作篇)(下)

  其中,请求行中回顾的内容有点子、U奥迪Q5I和HTTP版本,请求首部字段、通用首部字段和实业首部字段隶属于HTTP首部字段。

【04】浅谈ASP.NET框架 
 

  HTTP响应报文的社团如下:

【05】浅谈ASP.NET
MVC运转进程
    

 图片 3

【06】浅谈ASP.NET MVC
控制器
   

  其中,状态行包涵的始末有HTTP版本、状态码,响应首部字段、通用首部字段和实体首部字段是在HTTP首部字段的层面内。

【07】浅谈ASP.NET MVC
路由
   

  HTTP首部字段

【08】浅谈ASP.NET MVC
视图
 

  HTTP首部字段可以传递额外紧要音讯,使用首部字段是为了给浏览器和服务器提供报文主体大小、所利用的言语等附加音信。HTTP首部字段结构是由首部字段名和字段值构成:

【09】浅谈ASP.NET MVC
视图与控制传递数据的两种方法
 

 图片 4

【10】浅谈jqGrid 在ASP.NET
MVC中增删改查
     

  而HTTP首部字段根据实际用途被分成以下4种档次:

【11】浅谈ASP.NET
页面之间传值的三种艺术

    通用首部字段:请求报文和响应报文两方都会采用的首部。

【12】浅谈缓存技术在ASP.NET中的运用 
     

    请求首部字段:从客户端向劳动器端发送请求报文时采纳的首部,可补偿请求的叠加内容、客户端消息、响应内容有关优先级等新闻。

【13】浅谈NuGet在VS中的运用 
    

    响应首部字段:从服务端向客户端重临响应报文时利用的首部,可补偿响应的叠加内容,也会须要客户端附加额外的始末信息。

【14】浅谈ASP.NET
程序宣布进程
         
 

    实体首部字段:针对请求报文和响应报文的实业部分使用的首部,可以补充更新时间等与实业有关的新闻。

【15】浅谈数据注脚和验证

  当然,HTTP首部字段是有明确的,在CRUISERFC2616中有4八个,除了这47种首部字段,还有Cookie,Set-Cookie等在其余HavalFC中定义的首部字段。这么些非正式的首部字段统一总结在PRADOFC4229中。而且HTTP首部字段将概念成缓存代理和非缓存代理的一颦一笑,分成二种档次,端到端首部(End-to-end
Header)和逐跳首部(Hop-by-hop
Header)、其中端到端首部会转载给请求/响应对应的末梢接受目的,且必须保留在有缓存生成的响应中,其余规定它必须换车。而逐跳首部只对单次转载有效,会因经过缓存或代办而不再转载。

【16】浅谈依赖注入

  逐跳首部字段唯有七种,分别是Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade,除了那多少个首部字段之外,其余全属于端到端首部。

【17】浅谈HtmlHelper

  HTTP/1.1通用首部字段

【18】浅谈基于APS.NET身份验证

  HTTP通用首部字段是指请求报文和响应报文都可以接纳的首部字段。接下来介绍部分首部字段。

【19】浅谈ASP.NET MVC 模型

① Cache-Control

【20】浅谈ASP.NET MVC 单元测试

  Cache-Control首部字段的通令是操作缓存的劳作指令,能够决定缓存行为。

【21】浅谈ASP.NET MVC互联网安全;

图片 5

【22】浅谈ASP.NET MVC八大类扩张

缓存请求指令:

【23】再谈ASP.NET MVC Routing

 

【24】浅谈ASP.NET 高级话题

指令

参数

说明

no-cache

强制向源服务器再次验证

no-store

不缓存请求或响应的任何内容

max-age=[秒]

必需

响应的最大Age值

max-stale(=[秒])

可省略

接受已过期的响应

min-fresh=[秒]

必需

期望在指定时间内的响应仍有效

no-transform

代理不可更改媒体类型

only-if-cached

从缓存获取资源

cache-extension

新指令标记(token)

【25】浅谈大型ASP.NET MVC项目(含DEMO)

缓存响应指令:

【26】下一层层:ASP.NET WebAPI

指令

参数

说明

public

可向任意方提供相应的缓存

private

可省略

仅向特定用户返回响应

no-cache

可省略

缓存前必须先确认其有效性

no-store

不缓存请求或响应的任何内容

no-transform

代理不可更改媒体类型

must-revalidate

可缓存但必须再向源服务器进行确认

proxy-revalidate

要求中间缓存服务器对缓存的响应有效性再进行确认

max-age=[秒]

必需

相应的最大Age值

s-maxage=[秒]

必需

公共缓存服务器相应的最大Age值

cache-extension

新指令标记(token)

图片 6

 表示是或不是能缓存的通令:

本篇文章虽不谈架构,可是Cache又是架设中不可或缺的局地,因而,在授课Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以绝不明白,只怕直接跳过,

  ① public指令–分明标明其他用户也可利用缓存。

您只需关心Cache即可,具体的架构,会在持续小说中与大家大饱眼福。

  ② private指令–缓存服务器只会对特定用户响应提供能源缓存请求。

一   为何要在ASP.NET
项目中引入缓存

  ③
no-cache指令–假如是客户端发送的乞请中有其一命令,表示它不用缓存服务器的只怕过期的能源,它要一向从源服务器拿出来的能源。假使是服务端的响应请求中有其一命令,那么缓存服务器就不能对财富举办缓存,源服务器将来也无法对缓存服务器请求中提议的能源有效进行确认,且不准其对响应能源开展缓存操作。

  1. 作者们先来考虑2个题材,日常,面临高并发难点时,大家应当怎么处理?

 控制可举行缓存的靶子的授命:

下图为正规的处理思路和格局

  ①
no-store指令–暗示请求或响应中数量中涵盖机密音信,所以该指令规定缓存不可以在地面存储请求或响应的任一部分。
 指定缓存期限和验证的通令:

 图片 7

  ①
max-age指令–max-age表示缓存能源在缓存服务器上有效性的最大日子,如若判断缓存资源的缓存时间比指定时间的数值更小,那么客户端就可以直接收取缓存的能源,而毫无向源服务器拿财富。当指定max-age值为0,那么缓存服务器平时必要将请求转发给源服务器。而且HTTP/1.1本子的缓存服务器中,在遇见同时存在Expires首部字段的时候,会预先处理max-age指令。

2.为什么引入Cache呢?

  ②
s-maxage指令–该指令与max-age指令的功用雷同,不过此命令只适用于供多位用户使用的国有缓存服务器,对于向平等用户重复重回相应的服务器来说没有效。而且当时用s-maxage指令后,会一贯忽略max-age指令和Expires字段。

       
我们了然,造成高并发的根本原因是大方读写的标题,一般地,对于3个连串,读总是比写多,如大家连年逛Taobao,京东,天猫,唯品会等,但大家并不一定买东西(买东西,即下单,下单的操作,对应DB的Write操作),缓存紧要消除读的标题(当然,在后期的稿子中,小编会讲到音讯队列MQ,也是一种缓存机制,其不但解决读的标题,还缓解写的标题)。

  ③
min-fresh指令–须求缓存服务器再次来到至少还未雷纳Dini奥过缓存期限的缓存能源。

       
很好,大家知道缓存首要消除读的标题,那么,大家读的事物重重,是否缓存全体读的内容吗?答案是不是定的。缓存主要消除那些频仍访问,吃服务器财富,实时性需要相比低,不常更新的内容。

  ④
max-stale指令–须求就是是逾期了的命令,只要客户端须要了,那也如故响应已经过期的缓存财富。

二   ASP.NET
缓存技术概述

  ⑤
only-if-cached指令–表示除非是缓存服务器本地缓存着客户端所需求的财富,客户端才会要求回到其能源,假设地点缓存无响应,则会重回504状态码。

 (一)ASP.NET缓存技术项目

  ⑥
must-revalidate指令–代理会向源服务器再一次应验即将再次回到的响应缓存近年来是否仍旧有效,尽管不行,则会回来504状态码。而且,假设利用了must-revalidate指令,会忽略max-stale指令。

在ASP.NET实际项目花费中,大家得以采纳基本的二种缓存技术:页面缓存、局部页面和数据缓存

  ⑦
poxy-revalidate指令–必要具备缓存服务器在收取到客户端带有该指令的伸手重回响应以前,必须再度印证缓存的实用。

图片 8

  ⑧
no-transform指令–规定无论是在伸手仍然在响应中,缓存都不大概更改实体主题的传媒类型,那样做可防止患缓存或代理压缩图片等看似操作。

 1.整页缓存

 Cache-Control扩展

 
所谓整页缓存,指缓存整个页面,且设置刷新间隔时间,刷新间隔时间一般以秒为单位(缓存无法一体刷新,且刷新间隔不依靠外部事件);

  ① cache-extension token–可以增添Cache-Control首部字段内的下令。

 2.局地页面缓存

  Connection

 
 所谓部分页面缓存,也叫局部页面缓存,指通过设定影响页面的参数,此时的缓存存储页面的八个版本,一般情形须求依据参数值为那几个页面版本设置索引;

   Connection首部字段具有五个作用:控制不再转载给代理的首部字段、管理持久连接。

 3.运用程序缓存

  控制不再转载给代理的首部字段就是用Connection来针对,在代理服务器转载呼吁给服务器时,删去的首部字段。

 
 所谓运用程序缓存,也叫数据缓存,指将必要大批量服务器能源的目的存储在内存中,在ASP.NET中,由Cache类来已毕(Cache类的各个实例对应切实的种种运用程序,

  管理持久连接就是用Connection指向,服务器对客户端连接的涉嫌,关系词有Close和Keep-Alive。

其生存期依赖于接纳程序的生存期,当然,假如系统重启只怕断电,则另当别论。)

  Date

 (二)二级缓存技术

  声明成立HTTP报文的日子和岁月

在ASP.NET一般的种类中,我们应用二级缓存就足以消除服务器缓存难题了,如下为二级缓存的概略图。

  Date的格式有三种:

 图片 9

图片 10

1.何为一级缓存?

  Pragma

 
 一级缓存,指不重视外部缓存的缓存,上图中的二级缓存去掉外部缓存部分即为一流缓存;

  Pragma是HTTP/1,1以前版本的历史遗留字段,仅看成与HTTP的向后格外而定义。与Cache-Control的功能是同等的,可是Cache-Control指令是HTTP/1.1为规范的。所以在殡葬的伸手中会同时涵盖那多个首部字段:

 2.构成:由Web服务器、数据库服务器和二级缓存系统组合;

图片 11

 3.请求-处理流程:对于读数据,采纳从内向外的一一:内部缓存=》外部缓存=》数据库

  Trailer

   
(1)第一回呼吁读数据:褐绿的箭头表示首次呼吁,从数据库服务器DB中拿走数据,并将数据缓存在二级缓存系统中;

  首部字段Trailer会事先表明在报文主体后记录了哪些首部字段,该首部字段可使用在HTTP/1.1版本分块传输编码。

   
(2)非第一回呼吁读数据:先从二级缓存内部缓存中取数据突显页面,假使没有数量,则去二级缓存外部缓存中取数据体现页面,若外部缓存中没有数据,则再去数据库服务器中取数据;

  Transfer-Encoding

 图片 12

  该首部字段规定了传输报文主体时的编码格局。

 (4)对于写多少,才有从外向内顺序:数据库=》外部缓存=》内部缓存(那样做的目的,紧假诺保安数据的一致性);

  Upgrade

4.结合二级缓存系统的外部缓存系统,一般我们可挑选MongoDB,Redis,Mencached等;

  首部字段Upgrade用于检测HTTP协议及其余协商是或不是可应用更高的版本进行通信,其参数值可以用来制定二个通通差别的通讯协议。不过,使用首部字段Upgrade时,还需求非常指定Connection:
Upgrade。对于首部字段Upgrade的请求,服务器可用101状态码作为响应再次回到。

5.基于SOA+Redis的的貌似系统架构(当然,本篇文章不谈架构,由此不会分析架构,但会在后续的文章中独立讲解架构)

  Via

 图片 13

  接纳首部字段Via是为了追踪客户端与服务器之间的伏乞或响应报文的传导路径。报文经过代理或网关时,会先在首部字段Via中附加该服务器的新闻,然后再拓展转账。首部字段Via不仅用于追踪报文的转向,还足以免止请求回环的爆发。并且只要在客户端发送的央求必要经过多少个代理服务器的倒车,那么代理服务器会将自家的消息附加到Via首部,重临该请求的响应。

 6.如何保障数据的一致性?

  Warning  

 
对于读数据,采纳从内向外的逐一;对于写多少,选用从外向内的一一;

   该首部平日会告知用户一些与缓存相关的难点的警戒。

 7.缓存的有效期?

格式如下:

   
我们以Memcached做表面缓存为例,对于ASP.NET内部缓存,大家会担心内存不够用,而对此Memcached,则能够毫不顾虑内存不够用的题材。

HTTP报文分为二种,HTTP请求报文跟HTTP响应报文。

   
拔取二级缓存方案,Memcaches缓存与ASP.NET缓存都要开展严加的田间管理和操纵,因为Memcached工作在外围,直接对数据库中的数据进行读取,

  HTTP请求报文的布局如下:

且她的内存空间一般较大,故它的缓存数据有效期应该依照缓存数据在运用中的实际缓存有效期来设定,不会惨遭内部不足而被放走的熏陶,而ASP.NET

图片 14

缓存工作在内层,直接与使用程序中的数据开展互相,且ASP.NET框架对自身缓存的内存空间有所限制,缓存空间过大会影响总体运用的品质,为了在

  其中,请求行中包含的故事情节有艺术、UQashqaiI和HTTP版本,请求首部字段、通用首部字段和实业首部字段隶属于HTTP首部字段。

同一的内存空间下缓存更多的多寡,ASP.NET缓存的有效期应该小于或等于Memcached缓存的有效期,有效期具体多久视内存空间和拔取程序访问

  HTTP响应报文的协会如下:

频率的高低而定,ASP.NET对允许缓存数据的有效期之和无法凌驾其在Memcached中的有效期,那样才能达标缓存数据的一致性,三个缓存的协同工作

 图片 15

,可以对运用程序的访问速度带啦很大的晋升。

  其中,状态行包括的始末有HTTP版本、状态码,响应首部字段、通用首部字段和实业首部字段是在HTTP首部字段的范畴内。

(三)缓存涉及到的部分相关技能

  HTTP首部字段

缓存是一门技术,不大概花较少的篇幅即可讲领悟,如下简要列举部分Cache相关的技艺

  HTTP首部字段可以传递额外首要消息,使用首部字段是为了给浏览器和服务器提供报文主体大小、所利用的言语等附加音信。HTTP首部字段结构是由首部字段名和字段值构成:

图片 16

 图片 17

 

  而HTTP首部字段根据实际用途被分成以下4种类型:

 1.Cahe维护

    通用首部字段:请求报文和响应报文两方都会使用的首部。

保安互联网上的,本地的Cache;

    请求首部字段:从客户端向劳动器端发送请求报文时接纳的首部,可补偿请求的叠加内容、客户端音信、响应内容有关优先级等音讯。

2.路由政策

    响应首部字段:从服务端向客户端重回响应报文时使用的首部,可补充响应的附加内容,也会须要客户端附加额外的故事情节消息。

实际的路由策略要依照Cache架构和安排性来设定,大概讲解一下当地缓存路由政策

    实体首部字段:针对请求报文和响应报文的实体部分使用的首部,能够互补更新时间等与实体有关的音讯。

图片 18

  当然,HTTP首部字段是有规定的,在昂科威FC2616中有47个,除了那47种首部字段,还有Cookie,Set-Cookie等在其余酷威FC中定义的首部字段。这个非正式的首部字段统一总结在福特ExplorerFC4229中。而且HTTP首部字段将定义成缓存代理和非缓存代理的作为,分成三种档次,端到端首部(End-to-end
Header)和逐跳首部(Hop-by-hop
Header)、其中端到端首部会转载给请求/响应对应的结尾接受目的,且务必保留在有缓存生成的响应中,其它规定它必须换车。而逐跳首部只对单次转载有效,会因通过缓存或代办而不再转载。

 

  逐跳首部字段唯有七种,分别是Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade,除了那多个首部字段之外,其他全属于端到端首部。

3.替换算法

  HTTP/1.1通用首部字段

  HTTP通用首部字段是指请求报文和响应报文都能够采纳的首部字段。接下来介绍部分首部字段。

4.预取技术

① Cache-Control

  Cache-Control首部字段的指令是操作缓存的工作指令,可以决定缓存行为。

5.Cache品质分析

图片 19

借助于一些性情分析工具来分析,主要关注命中率/缓存对象大小之间关系

缓存请求指令:

图片 20

 

 6.过期策略

指令

参数

说明

no-cache

强制向源服务器再次验证

no-store

不缓存请求或响应的任何内容

max-age=[秒]

必需

响应的最大Age值

max-stale(=[秒])

可省略

接受已过期的响应

min-fresh=[秒]

必需

期望在指定时间内的响应仍有效

no-transform

代理不可更改媒体类型

only-if-cached

从缓存获取资源

cache-extension

新指令标记(token)

客观设置过时期隙,一般以秒为单位;

缓存响应指令:

7.数据一致性

指令

参数

说明

public

可向任意方提供相应的缓存

private

可省略

仅向特定用户返回响应

no-cache

可省略

缓存前必须先确认其有效性

no-store

不缓存请求或响应的任何内容

no-transform

代理不可更改媒体类型

must-revalidate

可缓存但必须再向源服务器进行确认

proxy-revalidate

要求中间缓存服务器对缓存的响应有效性再进行确认

max-age=[秒]

必需

相应的最大Age值

s-maxage=[秒]

必需

公共缓存服务器相应的最大Age值

cache-extension

新指令标记(token)

担保大旨同步,读写多少的依次等;

 表示是或不是能缓存的通令:

8.缓存级别

  ① public指令–鲜明表明其余用户也可应用缓存。

具体的级别,根据现实的事务须求来设定;

  ② private指令–缓存服务器只会对特定用户响应提供财富缓存请求。

9.Cache技术

  ③
no-cache指令–若是是客户端发送的呼吁中有其一命令,表示它并非缓存服务器的或许过期的能源,它要直接从源服务器拿出去的财富。假设是服务端的响应请求中有那么些命令,那么缓存服务器就不只怕对财富拓展缓存,源服务器以往也不或许对缓存服务器请求中指出的能源有效进行确认,且不准其对响应能源拓展缓存操作。

磁盘缓存,存储器缓存,WWW服务器缓存等;

 控制可实施缓存的靶子的下令:

10.数目缓存技术

  ①
no-store指令–暗示请求或响应中数据中涵盖机密音信,所以该指令规定缓存不可以在地头存储请求或响应的任一部分。
 指定缓存期限和认证的通令:

 客户端数据缓存,分布式数据缓存,集中式数据缓存等;

  ①
max-age指令–max-age表示缓存财富在缓存服务器上有效性的最大日子,即使判断缓存能源的缓存时间比指定时间的数值更小,那么客户端就可以直接吸纳缓存的财富,而毫不向源服务器拿能源。当指定max-age值为0,那么缓存服务器一般要求将呼吁转载给源服务器。而且HTTP/1.1版本的缓存服务器中,在遇见同时存在Expires首部字段的时候,会先行处理max-age指令。

三   Cache在ASP.NET
MVC中的运用

  ②
s-maxage指令–该指令与max-age指令的功能雷同,可是此命令只适用于供多位用户接纳的集体缓存服务器,对于向同一用户重复再次回到相应的服务器来说没有效。而且当时用s-maxage指令后,会直接忽略max-age指令和Expires字段。

(一)整页缓存

  ③
min-fresh指令–须要缓存服务器重临至少还没有当先缓存期限的缓存财富。

1.ASP.NET
MVC中有哪些整页缓存?

  ④
max-stale指令–需要就是是逾期了的授命,只要客户端必要了,那也照样响应已经过期的缓存能源。

 整页缓存是一种比较简单且常用的缓存格局,缓存那几个页面。在ASP.NET中,整页缓存一般包括控制器缓存,Action缓存,Web.config缓存等;

  ⑤
only-if-cached指令–代表除非是缓存服务器本地缓存着客户端所必要的能源,客户端才会须要回到其财富,倘诺当地缓存无响应,则会回到504状态码。

2.怎么页面须要整页缓存?

  ⑥
must-revalidate指令–代理会向源服务器再一次印证即将重临的响应缓存近期是还是不是依然有效,假如不算,则会再次回到504状态码。而且,若是应用了must-revalidate指令,会忽略max-stale指令。

 一般地,整页缓存页面具有“读取频仍,数据不常更新、编译时必要占用多量时刻和能源”等特征;

  ⑦
poxy-revalidate指令–须要具备缓存服务器在吸纳到客户端带有该指令的伸手重返响应以前,必须重新证实缓存的得力。

3.ASP.NET
MVC中整页缓存的语法格式

  ⑧
no-transform指令–规定无论是在伸手依然在响应中,缓存都无法更改实体中央的媒体类型,那样做可以预防缓存或代理压缩图片等相近操作。

图片 21

 Cache-Control扩展

 

  ① cache-extension token–可以增添Cache-Control首部字段内的下令。

4.例子

  Connection

 (1)控制器缓存

   Connection首部字段具有八个效用:控制不再转载给代理的首部字段、管理持久连接。

控制器缓存指把缓存成效于控制器。

  控制不再转发给代理的首部字段就是用Connection来针对,在代理服务器转载呼吁给服务器时,删去的首部字段。

 PageCacheController.cs

  管理持久连接就是用Connection指向,服务器对客户端连接的关联,关系词有Close和Keep-Alive。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace CacheDemo.Controllers
 8 {
 9     [OutputCache(Duration = 70)]
10     public class ControllerCacheController : Controller
11     {
12         // GET: Default
13         public ActionResult ControllerCache()
14         {
15             
16             ViewBag.CurrentTime = System.DateTime.Now;
17             return View();
18         }
19     }
20 }
21  

  Date

PageCache.cshtml

  注明创立HTTP报文的日期和时间

1 @{
2     ViewBag.Title = "ControllerCache";
3 }
4 
5 <h2>ControllerCache</h2>
6 
7 <div>
8     ViewBag的值:@ViewBag.CurrentTime
9 </div>

  Date的格式有三种:

Result:

图片 22

图片 23

  Pragma

 

  Pragma是HTTP/1,1事先版本的历史遗留字段,仅看成与HTTP的向后极度而定义。与Cache-Control的出力是千篇一律的,不过Cache-Control指令是HTTP/1.1为准绳的。所以在殡葬的请求中会同时涵盖那多少个首部字段:

(2)Action缓存

图片 24

Action缓存指把缓存成效于Action。控制措施缓存与控制器缓存原理大致,只然则控制器缓存把缓存成效于控制器,控制器方法缓存把缓存效用于控制器方法。那里就不上课了。

  Trailer

(3)Web.config缓存

  首部字段Trailer会事先表达在报文主体后记录了什么首部字段,该首部字段可使用在HTTP/1.1本子分块传输编码。

Web.config缓存,有点类似于大家将数据库连接字符串添加在配置文件一律,看看上面的代码,是不是很纯熟呢?

  Transfer-Encoding

<connectionStrings>
    <add name="SqlserverConstr" connectionString="Server=IP;db=DataBaseName;uid=UserName;pwd=Password" providerName="System.Data.SqlClient" />
  </connectionStrings>

  该首部字段规定了传输报文主体时的编码格局。

Web.config将索要缓存的Controller或Action提取抽象到布署文件中,其实就一定于大家拔取数据库连接字符串,使用时,调用即可。

  Upgrade

<system.web>
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <add name ="WebConfiCache" duration="70"/>
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" />
  </system.web>

  首部字段Upgrade用于检测HTTP协议及其他协商是或不是可应用更高的本子举行通讯,其参数值可以用来制订2个通通不一样的通讯协议。不过,使用首部字段Upgrade时,还索要分外指定Connection:
Upgrade。对于首部字段Upgrade的乞请,服务器可用101状态码作为响应重临。

咱俩将下面的控制器缓存参数用Web.config来安排

  Via

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace CacheDemo.Controllers
 8 {
 9     //[OutputCache(Duration = 70)]
10     [OutputCache(CacheProfile = "WebConfiCache")]
11     public class ControllerCacheController : Controller
12     {
13         // GET: Default
14         public ActionResult ControllerCache()
15         {
16             ViewBag.CurrentTime = System.DateTime.Now;
17             return View();
18         }
19     }
20 }
21  

  行使首部字段Via是为着追踪客户端与服务器之间的乞请或响应报文的传输路径。报文经过代理或网关时,会先在首部字段Via中附加该服务器的消息,然后再展开转向。首部字段Via不仅用于追踪报文的中转,还足避防止请求回环的发出。并且只要在客户端发送的伸手须求经过多少个代理服务器的转会,那么代理服务器会将自家的消息附加到Via首部,重临该请求的响应。

分析:

  Warning  

实际上一定不难,就当做数据库连接字符串来操作依然<appSetting>操作即可

 

图片 25

HTTP报文分为三种,HTTP请求报文跟HTTP响应报文。

 (3)缓存依赖

  HTTP请求报文的社团如下:

留下读者对象们去探讨,相比不难。

图片 26

(二)部分页面缓存

  其中,请求行中包涵的故事情节有点子、U途达I和HTTP版本,请求首部字段、通用首部字段和实体首部字段隶属于HTTP首部字段。

 部分页面缓存,也叫页面部分缓存,首要消除在页面缓存中需要日常实时更新的一有的内容。

  HTTP响应报文的构造如下:

 页面部分缓存就是缓存页面的一部分,而不是缓存整个页面,它适用于页面内一些部分或许要求更新的数指标情状,在常用页面部分缓存的技巧下平日利用先将全体页面缓存,然后再交替页面中不要求缓存的片段。(用AJAX局地刷新来通晓)

 图片 27

(三)运用程序缓存

  其中,状态行包蕴的情节有HTTP版本、状态码,响应首部字段、通用首部字段和实业首部字段是在HTTP首部字段的范围内。

应用程序缓存是用来囤积与使用程序有关的靶子,主要由Cache类来贯彻(命名空间System.Web.Caching),可以以编码的办法灵活地控制缓存的操作。

  HTTP首部字段

图片 28

  HTTP首部字段可以传递额外重点音信,使用首部字段是为着给浏览器和服务器提供报文主体大小、所利用的语言等附加新闻。HTTP首部字段结构是由首部字段名和字段值构成:

四   版权区

 图片 29

  • 谢谢您的开卷,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少一些文章利用读书、参考、引用、抄袭、复制和粘贴等三种艺术结合而成的,大部分为原创。
  • 如您喜爱,麻烦推荐一下;如你有新想法,欢迎指出,邮箱:2098469527@qq.com。
  • 可以转发该博客,但不大概不有名博客来源。

  而HTTP首部字段依据实际用途被分成以下4种档次:

    通用首部字段:请求报文和响应报文两方都会使用的首部。

    请求首部字段:从客户端向劳动器端发送请求报文时使用的首部,可补偿请求的增大内容、客户端消息、响应内容有关优先级等消息。

    响应首部字段:从服务端向客户端重返响应报文时拔取的首部,可补充响应的附加内容,也会要求客户端附加额外的情节音信。

    实体首部字段:针对请求报文和响应报文的实业部分应用的首部,能够补充更新时间等与实业有关的音信。

  当然,HTTP首部字段是有鲜明的,在CRUISERFC2616中有肆拾陆个,除了那47种首部字段,还有Cookie,Set-Cookie等在其余EscortFC中定义的首部字段。这一个非正式的首部字段统一回顾在凯雷德FC4229中。而且HTTP首部字段将概念成缓存代理和非缓存代理的行为,分成二种档次,端到端首部(End-to-end
Header)和逐跳首部(Hop-by-hop
Header)、其中端到端首部会转载给请求/响应对应的末段收到目的,且必须保留在有缓存生成的响应中,其它规定它必须换车。而逐跳首部只对单次转发有效,会因经过缓存或代理而不再转载。

  逐跳首部字段唯有各类,分别是Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade,除了那七个首部字段之外,其他全属于端到端首部。

  HTTP/1.1通用首部字段

  HTTP通用首部字段是指请求报文和响应报文都足以拔取的首部字段。接下来介绍部分首部字段。

① Cache-Control

  Cache-Control首部字段的一声令下是操作缓存的办事指令,可以决定缓存行为。

图片 30

缓存请求指令:

 

指令

参数

说明

no-cache

强制向源服务器再次验证

no-store

不缓存请求或响应的任何内容

max-age=[秒]

必需

响应的最大Age值

max-stale(=[秒])

可省略

接受已过期的响应

min-fresh=[秒]

必需

期望在指定时间内的响应仍有效

no-transform

代理不可更改媒体类型

only-if-cached

从缓存获取资源

cache-extension

新指令标记(token)

缓存响应指令:

指令

参数

说明

public

可向任意方提供相应的缓存

private

可省略

仅向特定用户返回响应

no-cache

可省略

缓存前必须先确认其有效性

no-store

不缓存请求或响应的任何内容

no-transform

代理不可更改媒体类型

must-revalidate

可缓存但必须再向源服务器进行确认

proxy-revalidate

要求中间缓存服务器对缓存的响应有效性再进行确认

max-age=[秒]

必需

相应的最大Age值

s-maxage=[秒]

必需

公共缓存服务器相应的最大Age值

cache-extension

新指令标记(token)

 表示是或不是能缓存的一声令下:

  ① public指令–显然标明别的用户也可使用缓存。

  ② private指令–缓存服务器只会对一定用户响应提供能源缓存请求。

  ③
no-cache指令–即便是客户端发送的请求中有这么些命令,表示它并非缓存服务器的或是过期的能源,它要直接从源服务器拿出来的能源。如若是服务端的响应请求中有那些命令,那么缓存服务器就不能对财富举行缓存,源服务器未来也无法对缓存服务器请求中提议的资源有效举办确认,且不准其对响应能源举行缓存操作。

 控制可进行缓存的靶子的授命:

  ①
no-store指令–暗示请求或响应中数据中蕴藏机密新闻,所以该指令规定缓存不或许在当地存储请求或响应的任一部分。
 指定缓存期限和认证的一声令下:

  ①
max-age指令–max-age代表缓存能源在缓存服务器上有效性的最大时间,假诺判断缓存能源的缓存时间比指定时间的数值更小,那么客户端就可以一向吸收缓存的财富,而并非向源服务器拿能源。当指定max-age值为0,那么缓存服务器寻常必要将请求转发给源服务器。而且HTTP/1.1本子的缓存服务器中,在蒙受同时存在Expires首部字段的时候,会事先处理max-age指令。

  ②
s-maxage指令–该指令与max-age指令的职能雷同,然则此命令只适用于供多位用户使用的公共缓存服务器,对于向平等用户重复重回相应的服务器来说没有效。而且当时用s-maxage指令后,会一直忽略max-age指令和Expires字段。

  ③
min-fresh指令–须要缓存服务器再次回到至少还并未超过缓存期限的缓存财富。

  ④
max-stale指令–需要就是是过期了的吩咐,只要客户端要求了,这也一如既往响应已经晚点的缓存财富。

  ⑤
only-if-cached指令–代表除非是缓存服务器本地缓存着客户端所需要的能源,客户端才会要求重回其财富,假设当地缓存无响应,则会回到504状态码。

  ⑥
must-revalidate指令–代理会向源服务器再度验证即将重临的响应缓存近日是不是仍然有效,就算不行,则会回到504状态码。而且,假如使用了must-revalidate指令,会忽视max-stale指令。

  ⑦
poxy-revalidate指令–要求有所缓存服务器在收取到客户端带有该指令的请求重返响应此前,必须重新证实缓存的一蹴而就。

  ⑧
no-transform指令–规定无论是在哀告仍旧在响应中,缓存都无法更改实体主旨的媒体类型,那样做可以防止缓存或代办压缩图片等相近操作。

 Cache-Control扩展

  ① cache-extension token–可以扩张Cache-Control首部字段内的指令。

  Connection

   Connection首部字段具有三个功效:控制不再转载给代理的首部字段、管理持久连接。

  控制不再转载给代理的首部字段就是用Connection来针对,在代理服务器转载呼吁给服务器时,删去的首部字段。

  管理持久连接就是用Connection指向,服务器对客户端连接的涉嫌,关系词有Close和Keep-Alive。

  Date

  申明创造HTTP报文的日期和岁月

  Date的格式有三种:

图片 31

  Pragma

  Pragma是HTTP/1,1事先版本的野史遗留字段,仅作为与HTTP的向后分外而定义。与Cache-Control的效用是相同的,不过Cache-Control指令是HTTP/1.1为原则的。所以在发送的呼吁中会同时涵盖这五个首部字段:

图片 32

  Trailer

  首部字段Trailer会事先表达在报文主体后记录了怎么首部字段,该首部字段可使用在HTTP/1.1版本分块传输编码。

  Transfer-Encoding

  该首部字段规定了传输报文主体时的编码情势。

  Upgrade

  首部字段Upgrade用于检测HTTP协议及任何协商是或不是可使用更高的版本举办通讯,其参数值能够用来制定3个截然分裂的通讯协议。不过,使用首部字段Upgrade时,还须要卓殊指定Connection:
Upgrade。对于首部字段Upgrade的伸手,服务器可用101状态码作为响应再次来到。

  Via

  利用首部字段Via是为着追踪客户端与服务器之间的呼吁或响应报文的传导路径。报文经过代理或网关时,会先在首部字段Via中附加该服务器的音信,然后再展开转向。首部字段Via不仅用于追踪报文的转折,还是能幸免请求回环的发生。并且只要在客户端发送的请求必要通过若干个代理服务器的转化,那么代理服务器会将自个儿的信息附加到Via首部,再次回到该请求的响应。

  Warning  

 图片 33

 HTTP/1.1
中定义了7种警示。而且警告码具备扩张性,将来有或者扩充新的警告码。

HTTP警告码:

警告码

说明

110

代理返回已过期的资源

111

代理再验证资源有效性时失败

112

代理与互联网连接被故意切断

113

响应的试用期超过24小时

199

任意大的警告内容

214

代理对内容编码或媒体类型等执行了某些处理时

299

任意的警告内容(持久)

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注