在我的应用程序(ASP.NET+ c#)中,我需要在用户进入aspx页面之前清除缓存.
有没有人知道如何以编程方式清除aspx页面或后面的代码(c#)中的缓存?
我的应用程序使用"常规"缓存清理程序(ActionController :: Caching :: Sweeper的子类)来缓存缓存(主要是片段).
现在,缓存过期会将应用程序锁定几秒钟,对客户所感知的性能产生负面影响.
能够异步地过期缓存会很棒,例如使用delayed_job(应用程序当前托管在heroku上).
不幸的是,简单地将handle_asynchronously添加到清扫器内的缓存过期功能似乎不起作用.
是否可以使用delayed_job异步使缓存片段到期?如果是这样,那么最好的做法是什么?
是否有将库文件缓存到内存和磁盘的java库?基本上,我希望库将文件缓存到内存中.但是,如果内存缓存大于某个阈值,则应将某些文件写入磁盘.
是否有任何Java库可以做到这一点?
GRAE
更新:
只是一些一般性评论.
我只会使用这些文件一次.它们只是临时文件.在一个完美的世界里,我会把它们全都留在记忆中.但是,我想我会耗尽内存.我猜我真正想要的是某种寻呼系统.这可以让我的内存耗尽,但也允许我避免写入每个磁盘.
在Rails 3.1开发模式中(使用资产管道时),使用响应标头"Cache Control:must-revalidate"提供由资产/图像提供的图像.
这意味着Google Chrome(以及看似只有Chrome)会尝试多次重新获取图片 - 即使在单页视图中也是如此.这导致了通过JavaScript进行DOM操作的所有方式的棘手问题.仅举几例:
我完全可以理解,对于开发服务器来说,这是一个合理的事情.我甚至可以理解,即使在单页视图中,Chrome也拒绝缓存图像,这是非常合理的.
那么,有没有办法改变Rails应用于开发中的图像响应的缓存控制头?
更新:正如几个人所建议的那样,一个更有趣的问题是,当没有其他浏览器出现时,为什么Chrome会尝试在网页浏览中多次重新获取图片?(为什么这不会给其他开发者带来问题?)
更新x2:我不打算将此作为答案提交,因为它只是一个适合我的目的的解决方法,但我们能够通过预编译资产然后丢弃预编译的CSS和JS来解决这个问题.(这将要求sprockets调试变为false development.rb.)
rake assets:precompile
cd public/assets
find . -name "*.js*" -exec rm -rf {} \;
find . -name "*.css*" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud) 我有一个Rails应用程序,它使用Cloudfront作为其CDN和sprockets来压缩资产并设置长Cache-Control标头.
对资产的第一个请求给我响应头像这样:
Cache-Control:public, max-age=31536000 Connection:close Content-Encoding:gzip Content-Type:application/javascript Etag:"892a3afb514e3c84646835f9ef101026" Last-Modified:Tue, 17 Jan 2012 16:05:17 GMT Server:thin 1.2.11 codename Bat-Shit Crazy Vary:Accept-Encoding Via:1.0 c662f4e5a3bc7b224ce1bbecb0a23d82.cloudfront.net:11180 (CloudFront), 1.0 fc4797024fafe16fcc03e892c23f078d.cloudfront.net:11180 (CloudFront) X-Amz-Cf-Id:bd2a89fb81bba2513f30d6940347693ef483defb4783da06d81b002af23545c39b9176b2c7cb144f,VF69FYlYU8ezzHQp7QkU2GvEQ8NmDqEwRX-wu7H63yNqE1ZlTaAq3g== X-Cache:Miss from cloudfront X-Runtime:0.012413 X-Ua-Compatible:IE=Edge,chrome=1
完善.它错过了Cloudfront的缓存,从我的应用程序中获取了缓存,因此它应该从现在开始加载它.
现在......如果我刷新页面,我会收到以下响应标题:
Connection:keep-alive Server:thin 1.2.11 codename Bat-Shit Crazy Via:1.0 86123d99569c9296c8605243e9a10621.cloudfront.net:11180 (CloudFront), 1.0 de9fc23d505dae3d19973a98bfa1eba0.cloudfront.net:11180 (CloudFront) X-Amz-Cf-Id:a7bf6ffb30c43d306835190d210aeb8ec794c1ff619ad7aaecbad220c1822fe165bda624ae8382e1,bcij_88KOAvLPSqEKDRSvOBjEj7atiKBCAjSbqc2cfdb-BHOTi--LA== X-Cache:RefreshHit from cloudfront X-Runtime:0.006909 X-Ua-Compatible:IE=Edge,chrome=1
看起来它打到了Cloudfront.我得到了304 not modified.所以我似乎并没有再次下载文件,但我发现这个请求也是我的源服务器.
为什么会这样?Cloudfront现在不应该始终缓存我的资产吗?我正在对我的资产进行版本控制,所以除了第一个请求之外,我真的绝不希望从服务器获取它.有什么办法可以强迫这种行为吗?
我想清除应用程序数据,就像我可以从设置中做到这一点.当我登录到facebook或twitter时,我需要在WebView中清除登录信息,因为当我为以下每个用户登录一次时会自动使用相同的数据
我试试这个:http: //www.hrupin.com/2011/11/how-to-clear-user-data-in-your-android-application-programmatically
没用,登录信息仍然在浏览器中
我尝试重置应用:
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
也
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
view.clearCache(true);
if(b){
Log.d("WEBVIEW", "onFinisghed b true");
Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
noCacheHeaders.put("Pragma", "no-cache");
noCacheHeaders.put("Cache-Control", "no-cache");
view.loadUrl(url, noCacheHeaders);
b = false;
}...
Run Code Online (Sandbox Code Playgroud)
大多数条目是指链接中描述的第一种方法,但它在我的情况下不起作用,任何想法?
我正在开发一个Struts 2项目.当用户单击logout按钮时,logout操作将使用清除会话session.clear().但是当用户back在注销后单击浏览器中的按钮时,它仍会显示上一页内容.如果back在注销后在浏览器中单击了按钮,我想将用户重定向到登录页面.
在我的注销行动中我还有什么要清楚解决这个问题吗?任何帮助将不胜感激.
我之前已经问过这个问题而没有得到满意的答复,所以这次我试着更具体一点.
我想在golang中实现一个服务器,它以svg的形式输出动态状态更新.(想想"构建传递/失败"GitHub徽章.)目的是应该能够在GitHub自述文件中嵌入到服务器地址的链接,并且自述文件应根据服务器状态自动更新.
这是我提出的golang代码,但它似乎不适用于GitHub积极缓存.我是否需要添加更多Cache-Control标头?我需要添加ETag吗?
我正在使用以下内容将图像嵌入GitHub自述文件中.
[]()
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望GitHub自述文件每次加载时都会更改图像 - 在两个图像之间翻转"正确"/"错误".(这只是概念证明.)
package main
import (
"log"
"net/http"
_ "time"
)
var mymap map[string][]byte
var state bool = false
func viewHandler(w http.ResponseWriter, r *http.Request) {
log.Printf("State %v", state)
state = !state
w.Header().Set("Content-Type", "image/svg+xml")
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
if state {
w.Write(mymap["correct"])
} else {
w.Write(mymap["wrong"])
}
}
func main() {
mymap = make(map[string][]byte)
mymap["correct"] = []byte(`<svg xmlns="http://www.w3.org/2000/svg" width="104" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><mask id="a"><rect width="104" height="20" rx="3" fill="#fff"/></mask><g …Run Code Online (Sandbox Code Playgroud) 在调试生产问题时,我们发现对URL的GET请求正在500 Internal Server Error为一个用户返回200 OK,但为其他人返回.看起来500是从缓存中提供的,但是自从重现这个bug以来的任何尝试都没有成功.
我的问题是:是否可以通过浏览器缓存错误响应?如果是这样,哪些浏览器支持它以及我需要复制它的缓存头?
我的直觉是不应缓存错误响应,因为即使修复了错误,您仍将继续被拒绝服务.基于哪些HTTP状态代码可缓存?它看起来似乎500不应该是可缓存的.缓存策略是否跨浏览器一致地实施?
昨天我在S3中查看了一个桶中的对象,并添加了这个标题:
Cache-Control: max-age=604800
Run Code Online (Sandbox Code Playgroud)
我是使用更改元数据选项完成的,因为我可以轻松地在每个文件夹中应用它:
现在,如果我直接请求图像,我会看到正确的标题:
Cache-Control: max-age=604800
Date: Fri, 25 May 2018 11:28:53 GMT
ETag: "1abf6cb38c4645f3de14a19beba80019"
Last-Modified: Fri, 25 May 2018 11:11:11 GMT
Server: AmazonS3
x-amz-id-2: qQk8NrWHNCOV5SmLvSQGahvYKuQIkcqQdc2I4Hdm2QLGkhet8cF4n1O+c2HLxhEVl7iBReFSflo=
x-amz-request-id: 97C53C15E86CD3FF
Run Code Online (Sandbox Code Playgroud)
但这是我通过CloudFront请求图像时的响应:
HTTP/1.1 304 Not Modified
Connection: keep-alive
Date: Fri, 25 May 2018 11:28:15 GMT
ETag: "1abf6cb38c4645f3de14a19beba80019"
Server: AmazonS3
Age: 70693
X-Cache: Hit from cloudfront
Via: 1.1 1d7454c76d6ac81147ca3cbd1284c8ae.cloudfront.net (CloudFront)
X-Amz-Cf-Id: CLiExdWbIvxcBFcoND6JYjcKQj54QyQkWl48OyPpUPLupHZl8SPfPQ==
Run Code Online (Sandbox Code Playgroud)
我在添加此标题时的意图是改进Pingdom for Leverage浏览器缓存的结果,但我仍然通过该部分中列出的CloudFront获取此桶中的URL:
https://d253b1eioa5z7b.cloudfront.net/bc_video_ ... 6_9_576_67de5812-fd82-4476-8b3f-886ad3a4907d.png
https://d253b1eioa5z7b.cloudfront.net/bc_video_ ... 6_9_576_a7ddd1ed-0913-41f6-927e-9db33b582a89.jpg
Run Code Online (Sandbox Code Playgroud)
当我对S3中的其他对象执行同样的操作时,我直接从网站上使用(没有CDN),我立即注意到对Pingdom结果的影响.
我应该等吗?或者我在这里做错了什么?
cache-control ×10
caching ×2
java ×2
amazon-s3 ×1
android ×1
asp.net ×1
browser ×1
c# ×1
cdn ×1
cookies ×1
delayed-job ×1
filesystems ×1
github ×1
go ×1
http-caching ×1
jquery ×1
memcached ×1
session ×1
struts2 ×1