@Override public void write(HeaderWriter writer) { writer.write(HTTPHeaderDefaults.CONNECTION, "closed"); } };
private static void writeHeadersWithHeaderWriter(HeaderWritable headers, HTTPContentType contentType, NetResponseWriter outputStream, int len, HeaderWriter headerWriter) { if (null!=headers) { headers.write(headerWriter); //NOTE: using content_length, connection or status are all discouraged here.. } headerWriter.writeUTF8(HTTPHeaderDefaults.SERVER, SERVER_HEADER_NAME); headerWriter.writeUTF8(HTTPHeaderDefaults.CONTENT_TYPE, contentType.getBytes()); headerWriter.write(HTTPHeaderDefaults.CONTENT_LENGTH, len); outputStream.writeByte('\r'); outputStream.writeByte('\n'); }
private static void writeHeader(NetResponseWriter outputStream, final int headerBlobPosition, final long positionOfLen, int statusCode, final int context, HTTPContentType contentType, int length, boolean chunked) { //logger.info("writing head at position {} ", headerBlobPosition); DataOutputBlobWriter.openFieldAtPosition(outputStream, headerBlobPosition); byte[] revisionBytes = HTTPRevisionDefaults.HTTP_1_1.getBytes(); byte[] etagBytes = null;//TODO: nice feature to add later int connectionIsClosed = 1&(context>>ServerCoordinator.CLOSE_CONNECTION_SHIFT); byte[] typeBytes = null!=contentType?contentType.getBytes():null; HTTPUtil.writeHeader(revisionBytes, statusCode, 0, etagBytes, typeBytes, length, chunked, true, outputStream, connectionIsClosed, w -> w.write(HTTPHeaderDefaults.DATE, outputStream.headerDate) ); int propperLength = DataOutputBlobWriter.length(outputStream); Pipe.validateVarLength(outputStream.getPipe(), propperLength); Pipe.setIntValue(propperLength, outputStream.getPipe(), positionOfLen); //go back and set the right length. outputStream.getPipe().closeBlobFieldWrite(); }
@Override public boolean responseHTTP(HTTPResponseReader reader) { if (reader.isConnectionClosed()) { return responder.closed(); } else { return responder.respondWith(200, !reader.isEndOfResponse(), (headWriter) -> { reader.structured().visit(HTTPHeader.class, (header,r,id)->{ //we are a proxy, our response has its own length, connection and status if (header != HTTPHeaderDefaults.CONTENT_LENGTH && header != HTTPHeaderDefaults.CONNECTION && header != HTTPHeaderDefaults.STATUS ) { headWriter.write(header, reader.getSpec(), r); } }); }, reader.contentType(), (payloadWriter) -> { payloadWriter.write(reader.structured().readPayload()); }); } }
if ( (header != HTTPHeaderDefaults.HOST) && (header != HTTPHeaderDefaults.CONNECTION) ){ headWriter.write((HTTPHeader)header, spec, hr);
w.write(header, spec, reader); });