private void sanitizeHeaders() { if (head || status == HttpResponseStatus.NOT_MODIFIED) { headers.remove(HttpHeaders.TRANSFER_ENCODING); } else if (status == HttpResponseStatus.RESET_CONTENT) { headers.remove(HttpHeaders.TRANSFER_ENCODING); headers.set(HttpHeaders.CONTENT_LENGTH, "0"); } else if (status.codeClass() == HttpStatusClass.INFORMATIONAL || status == HttpResponseStatus.NO_CONTENT) { headers.remove(HttpHeaders.TRANSFER_ENCODING); headers.remove(HttpHeaders.CONTENT_LENGTH); } }
@Override public MultiMap remove(CharSequence name) { headers.remove(toLowerCase(name)); return this; } }
@Override public MultiMap remove(String name) { headers.remove(toLowerCase(name)); return this; }
private boolean handle100Continue(ChannelHandlerContext ctx, int streamId, Http2Headers headers) { final CharSequence expectValue = headers.get(HttpHeaderNames.EXPECT); if (expectValue == null) { // No 'expect' header. return true; } // '100-continue' is the only allowed expectation. if (!AsciiString.contentEqualsIgnoreCase(HttpHeaderValues.CONTINUE, expectValue)) { return false; } // Send a '100 Continue' response. writer.writeHeaders( ctx, streamId, new DefaultHttp2Headers(false).status(HttpStatus.CONTINUE.codeAsText()), 0, false, ctx.voidPromise()); // Remove the 'expect' header so that it's handled in a way invisible to a Service. headers.remove(HttpHeaderNames.EXPECT); return true; }
private void sanitizeHeaders() { if (head || status == HttpResponseStatus.NOT_MODIFIED) { headers.remove(HttpHeaders.TRANSFER_ENCODING); } else if (status == HttpResponseStatus.RESET_CONTENT) { headers.remove(HttpHeaders.TRANSFER_ENCODING); headers.set(HttpHeaders.CONTENT_LENGTH, "0"); } else if (status.codeClass() == HttpStatusClass.INFORMATIONAL || status == HttpResponseStatus.NO_CONTENT) { headers.remove(HttpHeaders.TRANSFER_ENCODING); headers.remove(HttpHeaders.CONTENT_LENGTH); } }
@Override public MultiMap remove(CharSequence name) { headers.remove(toLowerCase(name)); return this; } }
@Override public MultiMap remove(String name) { headers.remove(toLowerCase(name)); return this; }
@Override public List<CharSequence> getAllAndRemove(CharSequence name) { List<CharSequence> result = getAll(name); delegate.remove(name); return result; }
@Override public CharSequence getAndRemove(CharSequence name) { CharSequence result = delegate.get(name); delegate.remove(name); return result; }
@Override public CharSequence getAndRemove(CharSequence name, CharSequence defaultValue) { if (delegate.contains(name)) { CharSequence result = delegate.get(name); delegate.remove(name); return result; } return defaultValue; }
@Override public boolean remove(CharSequence name) { int before = delegate.size(); delegate.remove(name); return before != delegate.size(); }
public void writeResponse(Http2Response response) { Http2Headers headers = response.getHeaders(); headers.add(BaseHttpEntity.REQUEST_ID, sourceRequest.getRequestId()); headers.add(RESPONSE_STATUS, headers.status()); headers.add(DATA_STREAM_ID, getStreamId()); headers.path(sourceRequest.getHeaders().path()); headers.method("POST"); headers.scheme("https"); headers.remove(PseudoHeaderName.STATUS.value()); byte[] data = response.getContent(); CompletableFuture<StreamWriteOperation> future; boolean endOfStream = (data == null || data.length == 0); future = connection.writeHeaders(headers, endOfStream, null); if (!endOfStream) { future.thenAccept(writeOperation -> writeOperation.writeData(response.getContent(), true)); } future.thenAccept(StreamWriteOperation::closeStream); }