internal Http.Response GetErrorResponseData(Http.ResponseState state, Http.HeaderFlag gzipFlag) { if (errorResponses != null) { return(gzipFlag == 0 ? errorResponses[(int)state].Key : errorResponses[(int)state].Value); } return(null); }
/// <summary> /// HTTP文件请求处理 /// </summary> /// <param name="header">请求头部信息</param> /// <param name="fileCache">文件输出信息</param> /// <param name="response">HTTP响应</param> protected unsafe void file(Http.Header header, FileCache fileCache, ref Http.Response response) { Http.HeaderFlag headerFlag = header.Flag; if (fileCache == null) { if (response != null) { if (response.Type == Http.ResponseType.File) { if ((headerFlag & Http.HeaderFlag.IsRange) != 0 && !header.FormatRange(response.BodySize)) { response = Http.Response.RangeNotSatisfiable416; return; } if ((headerFlag & Http.HeaderFlag.IsVersion) != 0 || isStaticFileCacheControl(header.Path)) { response.CacheControl = AutoCSer.Net.Http.Response.StaticFileCacheControl; } } if ((response.Flag & Http.ResponseFlag.IsPool) != 0 && (headerFlag & Http.HeaderFlag.IsSetOrigin) != 0 && this.isOrigin(header.Origin, (headerFlag & Http.HeaderFlag.IsSsl) != 0)) { response.SetAccessControlAllowOrigin(header.OriginIndex); } } return; } if ((headerFlag & Http.HeaderFlag.IsRange) != 0 && !header.FormatRange(fileCache.Data.Length)) { response = Http.Response.RangeNotSatisfiable416; return; } byte[] cacheControl = (headerFlag & Http.HeaderFlag.IsVersion) != 0 || isStaticFileCacheControl(header.Path) ? AutoCSer.Net.Http.Response.StaticFileCacheControl : this.cacheControl; bool isOrigin = (headerFlag & Http.HeaderFlag.IsSetOrigin) != 0 && this.isOrigin(header.Origin, (headerFlag & Http.HeaderFlag.IsSsl) != 0), isHeader = !isOrigin && (headerFlag & Http.HeaderFlag.IsRange) == 0 && FileCacheQueue.IsFileCacheHeader; if (isHeader && (response = (headerFlag & Http.HeaderFlag.IsGZip) == 0 ? fileCache.Response : fileCache.GZipResponse) != null && response.IsCacheControl(cacheControl)) { return; } SubArray <byte> body = (headerFlag & Http.HeaderFlag.IsGZip) != 0 && (headerFlag & Http.HeaderFlag.IsRange) == 0 ? fileCache.GZipData : fileCache.Data; response = Http.Response.Get(); //response.State = Http.ResponseState.Ok200; if (isHeader && body.Start == FileCache.HttpHeaderSize) { response.SetCanHeaderSize(ref body); } else { response.SetBody(ref body); } response.CacheControl = cacheControl; response.ContentType = fileCache.ContentType; if (body.Array != fileCache.Data.Array) { response.SetContentEncoding(Http.Response.GZipEncoding); } response.SetLastModified(fileCache.LastModified); if (isOrigin) { response.SetAccessControlAllowOrigin(header.OriginIndex); } return; }