【问题标题】:JS file in chrome is never cachedchrome 中的 JS 文件永远不会被缓存
【发布时间】:2023-04-02 12:31:01
【问题描述】:

我在服务器上动态创建包含已翻译字符串的 javascript 文件。 当我查看 chrome 检查器时,这个文件永远不会被缓存,(脚本文件夹中的其他实际 JS 文件会被缓存) *为什么不是?*

<script src="somepath/Scripts/translate-nl-BE.js"></script>
or
<script src="somepath/Scripts/translate-en-GB.js"></script>

这被映射到以下 MVC 操作:

[HttpGet]        
public ActionResult TranslateJS(string culturecode) {
     ViewBag.JSCulture = culturecode;
     Response.ContentType = "text/javascript";
     return PartialView("TranslateJS");
}

这是视图:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%
    string culturecode = ViewBag.JSCulture;
%>
var translations = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize((ViewBag.Translate as List<ERPManager.TranslationService.FlatTranslation>).Where(x=>x.CultureCode==culturecode).ToDictionary(t=>t.Key,f=>f.Value)) %>;

这基本上只是序列化一个 json 数组(我知道这看起来比只返回一个 jsonresult 更脏,但我不能 ajax 调用这个文件,它需要链接到一个脚本标签中

这是我从服务器得到的响应:

Cache-Control:private
Content-Length:10987
Content-Type:text/javascript; charset=utf-8
Date:Thu, 04 Apr 2013 10:15:11 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
X-Powered-By:ASP.NET

这里是返回的文件的预览:它基本上只是一个翻译的键值字典。

var translations = {"vertaald":"Vertaald","gerelateerd":"Gerelateerd","details":"Details"};

【问题讨论】:

  • 您希望它缓存多长时间?这种情况会经常改变吗?
  • 就浏览器而言,这个文件永远不会改变,所以应该永远缓存,但我可以满足于每天/每周到期

标签: javascript asp.net-mvc http google-chrome caching


【解决方案1】:

听起来你想要的是expires HTTP header

您可以在 MVC 代码中进行设置:

[HttpGet]        
public ActionResult TranslateJS(string culturecode) {
   ViewBag.JSCulture = culturecode;
   Response.ContentType = "text/javascript";
   Response.Expires = (60*24);//24 hours
   return PartialView("TranslateJS");
}

请记住,如果您设置了过期标头,浏览器将不会再次请求文件,直到缓存内容“过期” .谨慎使用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2011-06-27
    • 1970-01-01
    • 2016-02-24
    • 2020-12-07
    相关资源
    最近更新 更多