private HttpResponse newNotModified(HttpFileAttributes attrs, @Nullable String etag) {
        return HttpResponse.of(addCommonHeaders(ResponseHeaders.builder(HttpStatus.NOT_MODIFIED),
                                                attrs, etag));
    }
Returns a new {@link HttpResponse} which streams the content of the file which follows the specified
{@link ResponseHeaders}.

@param headers the {@link ResponseHeaders}
@param length the content length. The returned {@link HttpResponse} must stream only as many bytes as
              this value.
@param fileReadExecutor the {@link Executor} which should be used for performing a blocking file I/O
@param alloc the {@link ByteBufAllocator} which should be used for allocating an input buffer

@return the {@link HttpResponse}, or {@code null} if the file does not exist.
@throws IOException if failed to open the file. Note that an I/O error which occurred during content
                    streaming will be notified via the returned {@link HttpResponse}'s error
                    notification mechanism.
core/src/main/java/com/linecorp/armeria/server/file/AbstractHttpFile.java