Mor*_*eng 115 caching http no-cache
我被告知要防止用户信息泄露,只有"无缓存"的响应是不够的."无商店"也是必要的.
Cache-Control: no-cache, no-store
Run Code Online (Sandbox Code Playgroud)
在阅读本规范http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html后,我仍然不太清楚为什么.
我目前的理解是它只适用于中间缓存服务器.即使"无缓存"作为响应,中间缓存服务器仍然可以将内容保存到非易失性存储.中间缓存服务器将决定是否使用保存的内容进行后续请求.但是,如果响应中存在"no-store",则不应该在中间缓存服务器上存储内容.所以,它更安全.
还有其他原因我们需要"无缓存"和"无商店"吗?
Luk*_*ett 70
我必须澄清,no-cache这并不意味着不缓存.实际上,在使用任何缓存的响应之前,它意味着"使用服务器重新验证".
must-revalidate另一方面,只需要在资源被认为是陈旧时重新验证.
如果服务器说资源仍然有效,则缓存可以用其表示进行响应,从而减轻服务器重新发送整个资源的需要.
no-store实际上是完全不缓存指令,旨在防止表示以任何形式的缓存存储.
我说什么,但请注意RFC 2616 HTTP规范:
历史缓冲区可以将这些响应存储为其正常操作的一部分
但是,这可以从更新的RFC 7234 HTTP规范中省略,可能是为了no-store更强大,请参阅:
http://tools.ietf.org/html/rfc7234#section-5.2.1.5
Alc*_*nja 46
在某些情况下,即使Cache-Control: no-cache在响应头中,IE6仍将缓存文件.
如果no-cache指令没有指定字段名,那么缓存绝不能使用响应来满足后续请求,而不能成功地与源服务器重新验证.
在我的应用程序中,如果您访问了带有no-cache标题的页面,然后注销然后在浏览器中回来,IE6仍然会从缓存中获取页面(没有新的/验证请求到服务器).添加no-store标题会阻止它这样做.但是如果你按照他们的说法接受W3C,实际上没有办法控制这种行为:
历史缓冲区可以将这些响应存储为其正常操作的一部分.
浏览器历史记录与普通HTTP缓存之间的一般差异在规范的特定子部分中描述.
bac*_*h17 16
没有商店:
no-store指令的目的是防止无意释放或保留敏感信息(例如,在备份磁带上).no-store指令适用于整个消息,可以在响应中或在请求中发送.如果在请求中发送,则缓存不得存储此请求的任何部分或对其的任何响应.如果在响应中发送,则缓存不得存储此响应的任何部分或引发它的请求.该指令适用于非共享和共享缓存.在此上下文中"绝不能存储"意味着缓存不得故意将信息存储在非易失性存储中,并且必须尽力尝试在转发后尽快从易失性存储中删除信息.即使该指令与响应相关联,用户也可以在缓存系统之外明确地存储这样的响应(例如,使用"另存为"对话框).历史缓冲区可以将这些响应存储为其正常操作的一部分.该指令的目的是满足某些用户和服务作者的声明要求,这些用户和服务作者担心通过意外访问缓存数据结构而意外释放信息.虽然在某些情况下使用此指令可能会改善隐私,但我们提醒说,它绝不是确保隐私的可靠或充分机制.特别是,恶意或受损的缓存可能无法识别或遵守此指令,并且通信网络可能容易被窃听.
Htt*_*ort 14
如果要阻止所有缓存(例如,在使用后退按钮时强制重新加载),您需要:
IE没有缓存
Firefox没有商店
这里有我的相关信息:
http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/
tho*_*ter 11
no-store在正常情况下不应该是必要的,并且可能损害速度和可用性.它适用于HTTP响应包含非常敏感的信息的情况,它根本不应写入磁盘缓存,而不管为用户创建的负面影响.
这个怎么运作:
通常,即使诸如浏览器之类的用户代理确定不应该缓存响应,它仍然可以出于用户代理内部的原因将其存储到磁盘高速缓存中.此版本可用于"查看源","返回","页面信息"等功能,其中用户不一定再次请求该页面,但浏览器不认为它是新的页面视图并且提供用户当前正在查看的相同版本是有意义的.
使用no-store将阻止存储响应,但这可能会影响浏览器提供"查看源","返回","页面信息"等的能力,而不会对服务器进行新的单独请求,这是不可取的.换句话说,用户可以尝试查看源,如果浏览器没有将其保存在内存中,他们将被告知这是不可能的,或者它将导致对服务器的新请求.因此,no-store只有在确保内容未存储在缓存中的重要性超过了这些功能的不良用户体验不能正常或快速运行时才应使用.
我目前的理解是它只适用于中间缓存服务器.即使"无缓存"作为响应,中间缓存服务器仍然可以将内容保存到非易失性存储.
这是不正确的.与HTTP 1.1兼容的中间缓存服务器将遵循no-cache和must-revalidate指令,确保不缓存内容.使用这些指令将确保响应不会被任何中间缓存缓存,并且所有后续请求都将发送回原始服务器.
如果中间缓存服务器不支持HTTP 1.1,那么您将需要使用Pragma: no-cache并希望获得最佳效果.请注意,如果它不支持HTTP 1.1,那么no-store无论如何都是无关紧要的.
如果缓存系统正确实现了无存储,那么您就不需要无缓存.但并非所有人都这样做 此外,一些浏览器实现无缓存,就像它没有存储一样.因此,虽然不是严格要求,但两者都可能是最安全的.
对于chrome,no-cache用于在重新访问时重新加载页面,但是如果你回到历史记录中它仍然会缓存它(后退按钮).要重新加载历史记录页面,请使用no-store.IE需要重新验证才能在所有场合下工作.
所以只是为了避免我总是使用的所有错误和误解
Cache-Control: no-store, no-cache, must-revalidate
Run Code Online (Sandbox Code Playgroud)
如果我想确保它重新加载.
请注意,尝试下载通过https和服务器发送Cache-Control: no-cache或Pragma: no-cache标头提供的文件时,从版本5到8的Internet Explorer将引发错误.
请参阅http://support.microsoft.com/kb/812935/en-us
使用Cache-Control: no-store和Pragma: private似乎是最接近仍然有效的东西.
| 归档时间: |
|
| 查看次数: |
145364 次 |
| 最近记录: |