0

我将本文末尾的代码放到我的 MVC 控制器方法中:http: //msdn.microsoft.com/en-us/library/windowsazure/gg680299.aspx

我为cdn配置了cname并且一切正常,除了我觉得cdn没有缓存:)

有CDN url http://cdn.services.idemkvrachu.ru/services/BranchLogo/82f204fe-bb1d-4204-b817-d424e1284b17/E0F4F2AE-B6C2-4516-BE7C-59B649E2C5AC?lastUpdated=635169430040919922&width=4

这是原始网址 http://prm.idemkvrachu.ru/cdn/services/BranchLogo/82f204fe-bb1d-4204-b817-d424e1284b17/E0F4F2AE-B6C2-4516-BE7C-59B649E2C5AC?lastUpdated=635169430040919922&width=4

这是我的代码:

Response.Cache.SetExpires(DateTime.Now.AddDays(14));        
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetLastModified(blob.ChangDateOfs.DateTime);
return File(bytes, format);

当我检查从原始链接和 cdn 接收图片的时间时 - 我发现 cdn 上的时间更高。

此外,我正在尝试更改 blob.ChangDateOfs 并比较来自 cdn 响应的 Last-Modified 标头:它立即更改。

我的代码有什么问题?也许这个标头破坏了 cdn 缓存 Cache-Control public, no-cache="Set-Cookie"

4

1 回答 1

2

要解决缓存问题,您要做的第一件事是验证您的内容是否实际被缓存。o

为此,您可以添加值为 2 的 X-LDebug 标头。针对您的端点执行此操作的示例,其中包括输出的相关部分:

C:\Azure\Tools\wget\bin>wget -S --header "X-LDebug:2" http://cdn.services.idemkvrachu.ru/services/BranchLogo/82f204fe-bb1d-4204-b817-d424e1284b17/E0F4F2AE-B6C2-4516-BE7C-59B649E2C5AC?lastUpdated=635169430040919922&width=499

  Cache-Control: public, no-cache="Set-Cookie"

  Set-Cookie: ASP.NET_SessionId=nnxb3xqdqetj0uhlffdmtf03; path=/; HttpOnly

  Set-Cookie: idCity=31ed5892-d3cb-45eb-bd4f-526cd65f5302; domain=idemkvrachu.cloudapp.net; 

  X-Cache: MISS from cds173.sat9.msecn.net

如您所见,您将 Cache-Control 标头设置为 no-cache="Set-Cookie",然后设置 cookie。这是告诉 CDN 不缓存内容。由于您的代码仅将缓存控件设置为公共,我假设您的 web.config 或 aspx 页面中有一个设置正在修改缓存控件标头以添加 no-cache="Set-Cookie"。

于 2013-10-20T16:04:39.547 回答