private boolean isIfModifiedSinceHeaderPresent(Headers headers) { return headers.get("if-modified-since") != null; }
private boolean isPushResource(String url, Headers responseHeaders) { for (Pattern pushRegexp : pushRegexps) { if (pushRegexp.matcher(url).matches()) { Headers.Header header = responseHeaders.get("content-type"); if (header == null) return true; String contentType = header.value().toLowerCase(Locale.ENGLISH); for (String pushContentType : pushContentTypes) if (contentType.startsWith(pushContentType)) return true; } } return false; }
protected void reply(Stream stream, ReplyInfo replyInfo) { if (!stream.isUnidirectional()) stream.reply(replyInfo); if (replyInfo.getHeaders().get(HTTPSPDYHeader.STATUS.name(version)).value().startsWith("200") && !stream.isClosed()) { // We have a 200 OK with some content to send Headers.Header scheme = headers.get(HTTPSPDYHeader.SCHEME.name(version)); Headers.Header host = headers.get(HTTPSPDYHeader.HOST.name(version)); Headers.Header uri = headers.get(HTTPSPDYHeader.URI.name(version)); Set<String> pushResources = pushStrategy.apply(stream, headers, replyInfo.getHeaders()); for (String pushResourcePath : pushResources) { final Headers requestHeaders = createRequestHeaders(scheme, host, uri, pushResourcePath); final Headers pushHeaders = createPushHeaders(scheme, host, pushResourcePath); stream.syn(new SynInfo(pushHeaders, false), getMaxIdleTime(), TimeUnit.MILLISECONDS, new Handler.Adapter<Stream>() { @Override public void completed(Stream pushStream) { ServerHTTPSPDYAsyncConnection pushConnection = new ServerHTTPSPDYAsyncConnection(getConnector(), getEndPoint(), getServer(), version, connection, pushStrategy, pushStream); pushConnection.beginRequest(requestHeaders, true); } }); } } }
if (!isIfModifiedSinceHeaderPresent(requestHeaders) && isValidMethod(requestHeaders.get(HTTPSPDYHeader.METHOD.name(version)).value())) String scheme = requestHeaders.get(HTTPSPDYHeader.SCHEME.name(version)).value(); String host = requestHeaders.get(HTTPSPDYHeader.HOST.name(version)).value(); String origin = scheme + "://" + host; String url = requestHeaders.get(HTTPSPDYHeader.URI.name(version)).value(); String absoluteURL = origin + url; logger.debug("Applying push strategy for {}", absoluteURL); Headers.Header referrerHeader = requestHeaders.get("referer"); if (referrerHeader != null)
Headers headers = new Headers(clientSynInfo.getHeaders(), false); Headers.Header hostHeader = headers.get(HTTPSPDYHeader.HOST.name(clientVersion)); if (hostHeader == null)
private Headers createRequestHeaders(Headers.Header scheme, Headers.Header host, Headers.Header uri, String pushResourcePath) { final Headers requestHeaders = new Headers(); requestHeaders.put(HTTPSPDYHeader.METHOD.name(version), "GET"); requestHeaders.put(HTTPSPDYHeader.VERSION.name(version), "HTTP/1.1"); requestHeaders.put(scheme); requestHeaders.put(host); requestHeaders.put(HTTPSPDYHeader.URI.name(version), pushResourcePath); String referrer = scheme.value() + "://" + host.value() + uri.value(); requestHeaders.put("referer", referrer); // Remember support for gzip encoding requestHeaders.put(headers.get("accept-encoding")); requestHeaders.put("x-spdy-push", "true"); return requestHeaders; }
Headers.Header method = headers.get(HTTPSPDYHeader.METHOD.name(version)); Headers.Header uri = headers.get(HTTPSPDYHeader.URI.name(version)); Headers.Header version = headers.get(HTTPSPDYHeader.VERSION.name(this.version)); startRequest(new ByteArrayBuffer(m), new ByteArrayBuffer(u), new ByteArrayBuffer(v)); Headers.Header schemeHeader = headers.get(HTTPSPDYHeader.SCHEME.name(this.version)); if(schemeHeader != null) _request.setScheme(schemeHeader.value());