Hi Milos,
Images from global assets folder are served by EPiServer.Web.StaticFileHandler.
I've checked the source code. It will try to read staticFile section from web.config and read expirationTime value.
So, inside your web.config file, make sure that you've defined staticFile section:
and set some value for epirationTime:
Hope this helps!
Thanks, helped somewhat
With registering EpiServer.Framework.Configuration.StaticFileSection files from globalassets and contentassets got Cache-control set to public but real Expires: header was not outputed so it was unlimited caching without any control.
To get everything neat and tidy removing of caching profiles for desired extensions is a must. After that complete response is outputed
---- removed ----
...
...
---- removed ----
HTTP/1.1 200 OK
Cache-Control: public
Content-Type: image/jpeg
Expires: Wed, 15 Oct 2014 17:05:01 GMT
Last-Modified: Thu, 03 Jul 2014 11:17:27 GMT
Accept-Ranges: bytes
ETag: "1CF96B05F523FB0"
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 17 Jul 2014 17:05:00 GMT
Content-Length: 5894
Now even YSlow doesn't complain there.
I'm using the solution Dejan mentioned without removing the profiles (don't think the profiles has anything to do with the stuff being served by EPiServer.Web.StaticFileHandler) and it works for me with expires headings:
HTTP/1.1 200 OK
Cache-Control: public
Content-Type: image/jpeg
Expires: Thu, 16 Oct 2014 10:35:20 GMT
Last-Modified: Thu, 04 Sep 2014 08:37:30 GMT
Accept-Ranges: bytes
ETag: "1CFC81B76CF4100"
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 06 Oct 2014 10:35:20 GMT
Content-Length: 23851
I'm using the solution Dejan mentioned by just put staticFile configuration and it's work as expected.
Hi Dzung and Dejan,
where can I add staticfile Section.
I am using a custom blob provider.
Default expiration for globalassets in fiddler is 12 hours.
I am getting this error.
The configuration section 'staticFile' cannot be read because it is missing a section declaration
trying following settings
<location path="Global">
<staticFile expirationTime="365.00:00:00" />
</location>
any help?
Regards
Khurram
Hi Khurram,
I think first you need to insert
<section name="staticFile" type="EPiServer.Framework.Configuration.StaticFileSection, EPiServer.Framework" allowLocation="true" />
in configSections.
After that you can just use <staticFile expirationTime="365.0:0:0" /> same level as location. Then you could also add <staticFile expirationTime="365.0:0:0" /> beneath your location config section.
Hope this helps
Many thanks Dzung It worked. in Section name i was using StaticFile rather staticFile.
Regards
/K
Glad its helps you. It took me quite sometime to find out this when upgrade from 6 to 7.5.
Anyone been able to use above configuration to get a max-age=x part into the Cache-Control value?
Troubleshooing an issue with long lived cached PDF files now and just having Expires set seems to not be enough.
@Johan I am also trying to do this. I would rather use Cache-Control with mad-age instead of expirationTime
Thomas and Johan, AFAIK, changing the way EPiServer sets cahcing headers for media files, would require switching out how the cache policy is set in the MediaHandlerBase HttpHandler base class, but the way it is currently implemented, that would mean you'd have to switch out the internal ContentMediaHandler.
Personally, I'd rather have episerver open up an extension point where I could configure how cache headers should be sent.
I haven't tried switching it out myself, but maybe it's possible using a TemplateDescriptor(Inherited = true, TemplateTypeCategory = TemplateTypeCategories.HttpHandler) and replace the default implementation.
Hi
I have the same issue as Milos described above. Currently I'm testing on IIS express Episerver 9 with blob storage in azure. I am currently only seeing "Cache-Control: public" and "Expires: xx" on .gif and .svg files from globalassets. I have not knowingly done anything to remove jpeg caching wise, but would very much like jpeg to be included as well.
Here are the key bits from my web.config:
<configSections> ... <section name="staticFile" type="EPiServer.Framework.Configuration.StaticFileSection, EPiServer.Framework" allowLocation="true" /> </configSections> <system.web> ... <caching> <outputCache enableOutputCache="true"></outputCache> <outputCacheSettings> <outputCacheProfiles> <add name="ClientResourceCache" enabled="true" duration= "3600" varyByParam="*" varyByContentEncoding="gzip;deflate" /> <add name="CacheOneHour" enabled="true" duration="3600" varyByParam="*" varyByContentEncoding="gzip;deflate" /> </outputCacheProfiles> </outputCacheSettings> </caching> <system.web> <staticFile expirationTime="12:0:0"></staticFile>
Any hints on how to troubleshoot this?
@Simon
You should move <staticFile... /> into new <location> section as below.
<configuration> </configSections> …. <section name="staticFile" type="EPiServer.Framework.Configuration.StaticFileSection, EPiServer.Framework" allowLocation="true" /> </configSections> … <location path="globalAssets" > <staticFile expirationTime="12:0:0" /> </location> </configuration>
What EPiServer-version do you get this to work with? I'm using 10.4.3 and tried exactly the config that Kim Dung Nguyen suggested. But it doesn't work for me. No changes at all what I can see.
I had it working in both 9 and 10 but in the end we switched to use https://github.com/bjuris/EPiServer.CdnSupport instead. Easier to grasp and tweak.
Hello
I followed the guidelines for caching and have set both clientCache within staticContent and each extension profile under caching to 30.00:00:00. Nevertheless, when I look at requests in HttpFiddler or YSlow, images that are within globalassets don't pick up the value. Is there a way to extend expire date to those as well.
Example 1, file within globalassets:
HTTP/1.1 200 OK
Cache-Control: public
Content-Type: image/jpeg
Expires: Wed, 16 Jul 2014 00:08:29 GMT
Last-Modified: Thu, 03 Jul 2014 13:11:02 GMT
Accept-Ranges: bytes
ETag: "1CF96C03D378650"
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 15 Jul 2014 12:08:29 GMT
Example 2, image from other location in site structure:
HTTP/1.1 200 OK
Cache-Control: public,max-age=2592000
Content-Type: image/jpeg
Last-Modified: Fri, 04 Jul 2014 16:55:16 GMT
Accept-Ranges: bytes
ETag: "4d5ec6baa897cf1:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 15 Jul 2014 12:13:33 GMT
Obviously files within globalassets get Expires header set from somewhere, I just cannot find where. Any help? Thanx!