@Override public boolean containsKey(Object key) { return (key instanceof String && this.headers.contains((String) key)); }
@Override public boolean contains(String name) { return headers.contains(name); }
@Override public boolean contains(String name, String value, boolean caseInsensitive) { return headers.contains(name, value, caseInsensitive); }
@Override public boolean contains(CharSequence name) { return headers.contains(name); }
@Override public boolean contains(CharSequence name, CharSequence value, boolean caseInsensitive) { return headers.contains(name, value, caseInsensitive); }
@Override public boolean containsKey(Object key) { return (key instanceof String && this.headers.contains((String) key)); }
/** * Returns {@code true} if a header with the {@code name} and {@code value} exists, {@code false} otherwise. * <p> * If {@code ignoreCase} is {@code true} then a case insensitive compare is done on the value. * @param name the name of the header to find * @param value the value of the header to find * @param ignoreCase {@code true} then a case insensitive compare is run to compare values. * otherwise a case sensitive compare is run to compare values. */ public boolean contains(CharSequence name, CharSequence value, boolean ignoreCase) { return contains(name.toString(), value.toString(), ignoreCase); }
/** * Check if the given request is a multipart request * @return True if the request is a Multipart request */ public static boolean isMultipart(HttpRequest request) { if (request.headers().contains(HttpHeaderNames.CONTENT_TYPE)) { return getMultipartDataBoundary(request.headers().get(HttpHeaderNames.CONTENT_TYPE)) != null; } else { return false; } }
private FullHttpRequest createFullHttpRequest(HttpHeaders headers) { io.netty.handler.codec.http.HttpMethod nettyMethod = io.netty.handler.codec.http.HttpMethod.valueOf(this.method.name()); String authority = this.uri.getRawAuthority(); String path = this.uri.toString().substring(this.uri.toString().indexOf(authority) + authority.length()); FullHttpRequest nettyRequest = new DefaultFullHttpRequest( HttpVersion.HTTP_1_1, nettyMethod, path, this.body.buffer()); nettyRequest.headers().set(HttpHeaders.HOST, this.uri.getHost() + ":" + getPort(this.uri)); nettyRequest.headers().set(HttpHeaders.CONNECTION, "close"); headers.forEach((headerName, headerValues) -> nettyRequest.headers().add(headerName, headerValues)); if (!nettyRequest.headers().contains(HttpHeaders.CONTENT_LENGTH) && this.body.buffer().readableBytes() > 0) { nettyRequest.headers().set(HttpHeaders.CONTENT_LENGTH, this.body.buffer().readableBytes()); } return nettyRequest; }
HttpServerResponseImpl(final VertxInternal vertx, Http1xServerConnection conn, DefaultHttpRequest request, Object requestMetric) { this.vertx = vertx; this.conn = conn; this.version = request.protocolVersion(); this.headers = new VertxHttpHeaders(); this.status = HttpResponseStatus.OK; this.requestMetric = requestMetric; this.keepAlive = (version == HttpVersion.HTTP_1_1 && !request.headers().contains(io.vertx.core.http.HttpHeaders.CONNECTION, HttpHeaders.CLOSE, true)) || (version == HttpVersion.HTTP_1_0 && request.headers().contains(io.vertx.core.http.HttpHeaders.CONNECTION, HttpHeaders.KEEP_ALIVE, true)); this.head = request.method() == io.netty.handler.codec.http.HttpMethod.HEAD; }
private void prepareRequestHeaders(HttpRequest request, String hostHeader, boolean chunked) { HttpHeaders headers = request.headers(); headers.remove(TRANSFER_ENCODING); if (!headers.contains(HOST)) { request.headers().set(HOST, hostHeader); } if (chunked) { HttpUtil.setTransferEncodingChunked(request, true); } if (conn.options.isTryUseCompression() && request.headers().get(ACCEPT_ENCODING) == null) { // if compression should be used but nothing is specified by the user support deflate and gzip. request.headers().set(ACCEPT_ENCODING, DEFLATE_GZIP); } if (!conn.options.isKeepAlive() && conn.options.getProtocolVersion() == io.vertx.core.http.HttpVersion.HTTP_1_1) { request.headers().set(CONNECTION, CLOSE); } else if (conn.options.isKeepAlive() && conn.options.getProtocolVersion() == io.vertx.core.http.HttpVersion.HTTP_1_0) { request.headers().set(CONNECTION, KEEP_ALIVE); } }
@Override protected boolean isContentAlwaysEmpty(final HttpMessage msg) { // Unlike HTTP, RTSP always assumes zero-length body if Content-Length // header is absent. return super.isContentAlwaysEmpty(msg) || !msg.headers().contains(RtspHeaderNames.CONTENT_LENGTH); }
@Override protected void encode(ChannelHandlerContext ctx, HttpMessage msg, List<Object> out) throws Exception { Integer id = ids.poll(); if (id != null && id.intValue() != NO_ID && !msg.headers().contains(SpdyHttpHeaders.Names.STREAM_ID)) { msg.headers().setInt(Names.STREAM_ID, id); } out.add(ReferenceCountUtil.retain(msg)); }
@Benchmark public boolean nettySmallMiss() throws Exception { return nettySmallHeaders.contains(io.vertx.core.http.HttpHeaders.CLOSE.toString()); }
@Benchmark public boolean nettySmallExactMatch() throws Exception { return nettySmallHeaders.contains(io.vertx.core.http.HttpHeaders.CONTENT_LENGTH); }
@Benchmark public boolean nettySmallMatch() throws Exception { return nettySmallHeaders.contains(io.vertx.core.http.HttpHeaders.CONTENT_LENGTH.toString()); }
@Benchmark public boolean nettySmallExactMiss() throws Exception { return nettySmallHeaders.contains(io.vertx.core.http.HttpHeaders.CLOSE); }
/** * Implemented in accordance with RFC 7230 section 6.1 https://tools.ietf.org/html/rfc7230#section-6.1 */ @Override public boolean keepAlive(Request ahcRequest, HttpRequest request, HttpResponse response) { return HttpUtil.isKeepAlive(response) && HttpUtil.isKeepAlive(request) // support non standard Proxy-Connection && !response.headers().contains("Proxy-Connection", CLOSE, true); } }
@Override public boolean mustSendImmediately(FullHttpMessage msg) { if (msg instanceof FullHttpResponse) { return ((FullHttpResponse) msg).status().codeClass() == HttpStatusClass.INFORMATIONAL; } if (msg instanceof FullHttpRequest) { return msg.headers().contains(HttpHeaderNames.EXPECT); } return false; }
@Test public void testSetHeaders() { RequestBuilder requestBuilder = new RequestBuilder(); assertTrue(requestBuilder.headers.isEmpty(), "Headers should be empty by default."); Map<CharSequence, Collection<?>> headers = new HashMap<>(); headers.put("Content-Type", Collections.singleton("application/json")); requestBuilder.setHeaders(headers); assertTrue(requestBuilder.headers.contains("Content-Type"), "headers set by setHeaders have not been set"); assertEquals(requestBuilder.headers.get("Content-Type"), "application/json", "header value incorrect"); }