diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs index 080441dda4..4252d7aa82 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs @@ -114,6 +114,12 @@ namespace MediaBrowser.Server.Implementations.HttpServer /// result public object GetOptimizedResult(IRequest requestContext, T result, IDictionary responseHeaders = null) where T : class + { + return GetOptimizedResultInternal(requestContext, result, true, responseHeaders); + } + + private object GetOptimizedResultInternal(IRequest requestContext, T result, bool addCachePrevention, IDictionary responseHeaders = null) + where T : class { if (result == null) { @@ -122,20 +128,27 @@ namespace MediaBrowser.Server.Implementations.HttpServer var optimizedResult = requestContext.ToOptimizedResult(result); - if (responseHeaders != null) + if (responseHeaders == null) { - // Apply headers - var hasOptions = optimizedResult as IHasOptions; + responseHeaders = new Dictionary(StringComparer.OrdinalIgnoreCase); + } - if (hasOptions != null) - { - AddResponseHeaders(hasOptions, responseHeaders); - } + if (addCachePrevention) + { + responseHeaders["Expires"] = "-1"; + } + + // Apply headers + var hasOptions = optimizedResult as IHasOptions; + + if (hasOptions != null) + { + AddResponseHeaders(hasOptions, responseHeaders); } return optimizedResult; } - + /// /// Gets the optimized result using cache. /// @@ -166,7 +179,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer if (responseHeaders == null) { - responseHeaders = new Dictionary(); + responseHeaders = new Dictionary(StringComparer.OrdinalIgnoreCase); } // See if the result is already cached in the browser @@ -177,7 +190,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer return result; } - return GetOptimizedResult(requestContext, factoryFn(), responseHeaders); + return GetOptimizedResultInternal(requestContext, factoryFn(), false, responseHeaders); } /// @@ -209,7 +222,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer if (responseHeaders == null) { - responseHeaders = new Dictionary(); + responseHeaders = new Dictionary(StringComparer.OrdinalIgnoreCase); } // See if the result is already cached in the browser @@ -363,7 +376,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer public object GetStaticResult(IRequest requestContext, StaticResultOptions options) { var cacheKey = options.CacheKey; - options.ResponseHeaders = options.ResponseHeaders ?? new Dictionary(); + options.ResponseHeaders = options.ResponseHeaders ?? new Dictionary(StringComparer.OrdinalIgnoreCase); var contentType = options.ContentType; if (cacheKey == Guid.Empty)