首页 / 知识
关于c#:为什么HttpCacheability.Private抑制ETag?
2023-04-13 12:37:00

Why does HttpCacheability.Private suppress ETags?在编写自定义IHttpHandler时,我遇到了关于HttpCachePolicy对象的意外行为。 我的处理程序计算并设置一个实体标签(使用与当前响应对象关联的HttpCachePolicy上的SetETag方法)。如果我使用SetCacheability方法将缓存控件设置为public,那么一切都会像超级按钮一样工作,并且服务器会发送e-tag标头。如果将其设置为私有,则电子标签标头将被隐藏。 也许我只是看起来不够努力,但是我没有在HTTP / 1.1规范中看到任何可以证明这种行为合理的东西。为什么在仍然禁止代理存储数据的同时,不希望将E-Tag发送给浏览器?
将返回
但是,如果我们将其更改为公开,它将返回
到目前为止,我已经在ASP.NET开发服务器和IIS6上运行了此程序,并获得了相同的结果。我也无法使用以下方式显式设置ETag
更新:在IIS7中运行时,可以手动附加ETag标头,我怀疑这是由于ASP.NET与IIS7管道之间的紧密集成引起的。 澄清:这是一个很长的问题,但核心问题是:ASP.NET为什么要这样做,我该如何解决?我应该这样做吗? 更新:我将接受托尼的回答,因为它基本上是正确的(去托尼!)。我发现,如果您想模拟HttpCacheability.Private,则可以将可缓存性设置为ServerAndPrivate,但是您也可以调用cache.SetOmitVaryStar(true),否则缓存会将Vary:*标头添加到输出中,您不需要那。当我获得编辑权限时,我会将其编辑为答案(或者,如果您看到此Tony,也许您可??以编辑答案以包括该呼叫?) 我认为您需要使用HttpCacheability.ServerAndPrivate 那应该在标题中为您提供cache-control:private,并让您设置一个ETag。 关于该文档的文档需要更好一些。 编辑:Markus发现您也有调用cache.SetOmitVaryStar(true),否则缓存会将Vary:*标头添加到输出中,而您不希望这样做。
不幸的是,如果您查看.NET Reflector中的 如果像我一样,您对此处提到的使用Cacheability.ServerAndPrivate的解决方法不满意,并且您真的想使用专用-也许是因为您是为用户单独定制页面并且在服务器上进行缓存没有意义-那么至少在.NET 3.5中,您可以通过Response.Headers.Add设置ETag,这可以正常工作。 N.B.如果执行此操作,则必须自己实现客户端标头与HTTP 304响应处理的比较-不确定.NET在正常情况下是否可以为您解决此问题。 |
最新内容
相关内容
Python类和对象
Python类和对象,代码,培训,对象,实例,定义,关键字,函数,问题,顶层,全名,刚接触python中的类和对象,我也和大多数小伙伴一样迷茫,不知道它和我所怎么在Python装饰器中自定义功能呢
怎么在Python装饰器中自定义功能呢?,代码,包装,环境,名称,工具,名字,变动,业务,主体,面临,setattr和getattr操作首先我们来看下setattr和geta列举Python面向对象中带双下划线的
列举Python面向对象中带双下划线的特殊方法,信息,代码,培训,对象,属性,方法,实例,字符串,里边,内容,__new__:生成实例__init__:生成实例的属性_Python面向对象的基本概念
Python面向对象的基本概念,概念,信息,位置,新增,培训,属性,鸟类,定义,对象,方法,python使用类(class)和对象(object),进行面向对象(object-oriPython 条件对象
Python 条件对象,状态,培训,对象,条件,线程,方法,底层,发生,场景,典型,条件对象总是与某种类型的锁对象相关联,锁对象可以通过传入获得,或者在Python 事件对象
Python 事件对象,通信,培训,线程,事件,对象,内部,标志,信号,机制,以上,一个线程发出事件信号,其他线程等待该信号,这是最简单的线程之间通信机Python之什么是面向对象?
Python之什么是面向对象?,设计,流程,代码,个体,大唐,对比,培训,模子,上帝,对象,OOP(ObjectOrientedPrograming)编程是利用“类”和“对象”来Python 之什么是类,什么是对象?
Python 之什么是类,什么是对象?,概念,代码,名称,名字,公司,部门,社会,培训,策略,情况,类即类别、种类,是面向对象设计最重要的概念,从一小节我们怎样用python计算矩阵乘法?
怎样用python计算矩阵乘法?,位置,矩阵,培训,一致,乘法,数组,函数,示例,作用,标量,python中计算矩阵乘法的方法:1、使用np.multiply()函数计算Python中怎么计算圆周长?
Python中怎么计算圆周长?,公式,培训,圆周,半径,浮点,以上,结果,更多,内容,python中怎么计算圆周长呢?1、首先输入圆的半径2、其次将输入的半怎么计算python程序运行时间
怎么计算python程序运行时间,时间,培训,程序,方式,脚本,下面,以上,两个,结束,不是,python脚本使用统计时间的方式是time.clock(),而这种方式统python如何计算程序运算时间
python如何计算程序运算时间,时间,系统,单位,培训,程序,方法,浮点,以来,类型,纪元,python计算程序运算时间的方法:方法1:importdatetimestartti