我最近遇到了一个名为Varnish的http网络加速器.根据我的阅读,Varnish通过使用反向代理配置优化与HTTP服务器的HTTP通信的每个进程来加速网站的交付.
我的问题是,如果你有一个具有它的缓存机制配置一路下跌到静态html文件的网站,那么多少的效果光油对吗?反向代理是否会削减HTTP服务器处理请求所执行的工作?如果您在服务器端广泛缓存了所有内容(HTTP标头,Etags,过期标头,数据库缓存,片段和页面缓存),那么HTTP加速器还会做些什么来改进这一点?
据我所知,HTTP标头Vary指定了一个逗号分隔的HTTP标头列表,在决定请求是否为缓存命中或未命中时,缓存需要将这些标头与URL一起考虑.
如果省略该标头,则表示仅考虑URL.
但是当标题出现时会发生什么Vary:*?
***的变化字段值表示未指定的参数(不限于请求标头(例如,客户端的网络地址))在响应表示的选择中起作用.*值绝不能由代理服务器生成; 它可能只由原始服务器生成.
Vary的头字段值*始终无法匹配,并且该资源上的后续请求只能由源服务器正确解释.
这是否意味着具有此标头的所有请求都将是缓存未命中?
我发现如果您使用它们OutputCacheAttribute,ASP.NET将返回该HTTP标头,如果您不想要标头,或者您想要指定自定义标头,则必须显式禁用该行为,因此我(想)相信它不太可能.
哪个是实用意义Vary:*?
谢谢.
我有一个应用程序需要在Web上重复请求内容.现在,服务器端实现遵循使用标头的http缓存标准.我想知道是否有扩展版本的HttpClient或其他工具将存储响应并与标头交互以进行自动缓存.如果没有一个没问题的话,我只想在已有工具的情况下跳过实现.
谢谢
我对HttpCache和Singleton方法的理解有点困惑.
我的应用程序使用Asp.net MVC和的情况是,我有一些数据列表,这将永远不会改变,有些数据可能很少改变.
我已经使用Singleton存储库为这种类型的数据开发和部署了应用程序.它表现很好.唯一的问题是,当罕见的情况发生时,我必须重新启动IIS才能生效.
什么是最好的解决方案.
单身实施
public class SingletonRepository : ISingletonRepository
{
private static SingletonRepository singleInstance;
private readonly IStateRepository stateRepo;
private readonly ICountryRepository countryRepo;
private readonly ITDPaymentModeRepository paymentModeRepo;
private readonly ITDPlanRepository planRepo;
private readonly ITDOrderTypeRepository orderTypeRepo;
private readonly IKeywordRepository keywordRepo;
private readonly IAgencyRepository agencyRepo;
private readonly IList<AT_STATE> lstState;
private readonly IList<AT_COUNTRY> lstCountry;
private readonly IList<TDPaymentMode> lstPaymentMode;
private readonly IList<TDPlan> lstPlan;
private readonly IList<TDOrderType> lstOrderType;
private readonly IList<Keyword> lstKeyword;
private readonly IList<Agency_MST> lstAgency;
private SingletonRepository()
{
stateRepo = new StateRepository();
countryRepo …Run Code Online (Sandbox Code Playgroud) 我正在从SOAP转向REST,我想让我的同事相信这是一个很好的举措.我们不需要SOAP可以提供的额外安全机制.对我们来说,SOAP和WSDL的开销多年来一直被证明是令人头痛的问题.
除了明显的简化之外,我们系统的一个非常有价值的优点是HTTP缓存机制.我已经阅读了有关该主题的内容,但我仍然不完全理解为什么这些缓存机制不能应用于SOAP消息.
是不是因为REST 按照惯例编码了url中的所有参数?由于GET调用也可以有一个带参数的主体,我知道它不受REST限制,但如果你这样做,缓存机制不起作用?
我的服务器正在为缓存支持设置etag标头元素.
iOS(6.1.4)应用程序使用本机NSURLConnection类将XML请求发送到服务器
第一次服务器发送响应时,标题中设置了etag
如果iOS应用程序向服务器发送完全相同的请求,我可以在服务器日志中看到NSURLConnection未填充if-none-match标头
...然后服务器响应200而不是304
用于请求的缓存策略是:
[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad];
Run Code Online (Sandbox Code Playgroud)
NSURLCache初始化为
[[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10];
Run Code Online (Sandbox Code Playgroud)
我的问题: - NSURLConnection没有设置"if-none-match"头字段是否正常? - 我是否需要自己设置此标题字段?(从缓存中获取响应,读取etag值并在请求标头中设置)?
我正在尝试在我的.NET客户端和服务器之间进行缓存.在WinInet决定缓存结果之前,我看到一个看似随机的端点命中数.
.NET客户端使用HttpWebRequest以下命令发出请求
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uiTextBoxUrl.Text);
var policy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable);
webRequest.CachePolicy = policy;
WebResponse webResponse = webRequest.GetResponse();
Run Code Online (Sandbox Code Playgroud)
使用ASP.net Web API实现的服务器设置以下CacheControl标头:
response.Headers.CacheControl = new CacheControlHeaderValue
{
MaxAge =3600,
MustRevalidate = true,
Public = true,
Private = true
};
Run Code Online (Sandbox Code Playgroud)
使用带有将请求发送到端点的按钮的测试工具,我可以看到,即使CacheIfAvailable使用了,也不会立即缓存响应.通过检查我的服务器上的调试输出,我发现在最终缓存请求之前需要触发看似随机数量的命中(或者更有可能是命中计数/经过时间启发式).如果我快速敲击测试按钮,它将在大约10次点击后开始缓存.如果我每隔1或2秒点击一次按钮,我就会计算最多25次点击,然后再进行缓存.
这是我从Fiddler看到的回应:
HTTP/200 responses are cacheable by default, unless Expires, Pragma, or Cache-Control headers are present and forbid caching.
HTTP/1.1 Cache-Control Header is present: …Run Code Online (Sandbox Code Playgroud) 在有效的Android HTTP中, Jesse Wilson提到了以下内容:
提供图像等静态资源?使用永久URL并让它永远缓存
我正在使用Picasso和一个特定的OkHttp实例来获取和缓存图像.我想知道如何设置let it cache forever策略?
我只能考虑Cache-Control: max-stale=用尽可能高的值覆盖HTTP缓存控制头max-stale(),还有另一种(更好的)方法吗?
我在我的网站上使用Youtube(v3)API,其中显示了许多YouTube视频缩略图.例如:https://i1.ytimg.com/vi/0ZL_q7oUVrQ/mqdefault.jpg
当我查看我的网站的Google Insights(https://developers.google.com/speed/pagespeed/insights/)时,它会抱怨"利用浏览器缓存"错误.我已经注意到添加了来自我的服务器的静态资源的到期日期,例如js/css文件,但Google的见解主要是抱怨外部直接来自Youtube服务器的缩略图.
我的网站有很多,这些缩略图和缓存它们是非常重要的,快速的页面加载但YouTube的服务器已经为只有6个小时的到期时间,我没有找到一个方法来改变,因为他们是外部到我的服务器.
我非常感谢有人可以建议我更好地处理浏览器缓存,因为资源来自外部服务器(例如来自youtube服务器的缩略图)我很惊讶Youtube只设置了到期时间6小时虽然图像是经常更换的最不可能的资源......!
youtube-api http-caching browser-cache pagespeed youtube-javascript-api
我们使用 nginx 作为反向代理并启用了http_auth_request_module。我们希望将请求缓存到我们的身份验证服务器以减少该服务器的负载。这是到目前为止的 nginx 配置:
server {
...
location /sso {
auth_request /identity;
proxy_pass http://localhost:8081;
}
location /identity {
internal;
proxy_pass http://localhost:8081;
proxy_cache_path /opt/nginx/cache levels=1:2 keys=authentication:1m;
proxy_cache authentication;
proxy_cache_key $cookie_authentication;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
}
Run Code Online (Sandbox Code Playgroud)
正在接受请求并且身份验证有效。但是没有任何内容写入缓存目录。Nginx 有足够的权限写入缓存目录:
drwxrwxrwx 2 nobody wheel 68B Jul 18 16:34 cache
Run Code Online (Sandbox Code Playgroud)
如何使 http_auth_request_module 从缓存中读取并使 nginx 将响应写入缓存?
http-caching ×10
http ×4
caching ×3
android ×2
.net ×1
asp.net-mvc ×1
http-headers ×1
httpclient ×1
ios ×1
java ×1
nginx ×1
okhttp ×1
pagespeed ×1
picasso ×1
rest ×1
singleton ×1
soap ×1
varnish ×1
wininet ×1
youtube-api ×1