我正在开发一个单页应用程序,我对服务器有很多请求。有一个非常大的响应(如20-30 kb),这个响应每周更改一次,我想基于eTag在浏览器中缓存响应。 ETag是从服务器正确设置的,但浏览器不会在下一个请求时发回eTag。
这是我的服务器代码:
public string GetActiveConfiguration()
{
var requestedETag = Request.Headers["If-None-Match"];
var responseETag = layoutRepository.GetActiveConfigurationVersion().ToString();
if (requestedETag == responseETag)
{
Response.StatusCode = 304;
return "";
}
Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
Response.Cache.SetETag(responseETag);
return layoutRepository.GetActiveConfiguration();
}
这是我的客户代码:
$.ajax({
url: 'Admin/GetActiveConfiguration',
type : 'GET',
ifModified: true,
success: function (data) {
that.configuration = $.parseJSON(data);
that.setRoles();
that.setTitleAndIcon();
that.initializeChat();
callback();
//that.loadViews(Object.keys(window.params)[0]);
}
});
以下是服务器响应:
缓存控制:私人 内容编码:gzip 内容长度:6544 内容类型:text / html的;字符集= utf-8的 日期:2014年5月13日星期二14:19:52 GMT ETag:13.05.2014 17:01:02 服务器:Microsoft-IIS / 8.0 有所不同:接受编码 X-ASPNET-版本:4.0.30319 X-AspNetMvc-版本:4.0 X-已启动方式:ASP.NET X-SourceFiles:????= UTF-8乙QzpcUHJvamVjdHNcZUNvbW1lcmNlXE1pY3JvaW52ZXN0IGVDb21tZXJjZSBQcm8gTmV3XE1pY3JvaW52ZXN0IGVDb21tZXJjZSBQcm8gTmV3XEFkbWluXEdldEFjdGl2ZUNvbmZpZ3VyYXRpb24 = =
以下是客户请求:
接受: / 接受编码:gzip,放气,SDCH 接受语言:EN-GB,EN; Q = 0.8 缓存控制:无缓存 连接:保持活跃 饼干:I'llhideThoseOnPurpose :) 主持人:本地主机:61061 附注:无缓存 引用站点:本地主机 用户代理:Mozilla / 5.0(Windows NT 6.2; WOW64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 34.0.1847.131 Safari / 537.36 X-请求-随着:XMLHttpRequest的
我做错了什么?
答案 0 :(得分:1)
在服务器端添加:
context.Response.Cache.VaryByHeaders["If-None-Match"] = true;