public HttpResponse processRequest(HttpRequest request) { String requestUri = request.RequestUri; if (requestUri.EndsWith("/")) { requestUri = requestUri + "index.html"; } { // some validation validateRequestUri(requestUri); validateMimeTypeForRequestUri(requestUri); } FileInfo absoluteFileInfo = toAbsoluteFileInfo(requestUri); String eTag = getETag(absoluteFileInfo); HttpResponse answer; String ifNoneMatch = request.getHttpHeader("if-none-match"); if (null != ifNoneMatch && ifNoneMatch.Equals(eTag)) { answer = new HttpResponse(HttpStatus.NOT_MODIFIED_304); } else { Entity body = readFile(absoluteFileInfo); answer = new HttpResponse(HttpStatus.OK_200, body); String contentType = MimeTypes.getMimeTypeForPath(requestUri); answer.setContentType(contentType); } if (null != _cacheControl) { answer.putHeader(_cacheControl.getName(), _cacheControl.getValue()); } { answer.putHeader("Date", DateTime.UtcNow.ToString("R")); } { var lastModified = absoluteFileInfo.LastWriteTimeUtc; answer.putHeader("Last-Modified", lastModified.ToString("R")); } answer.putHeader("ETag", eTag); return answer; }