
org.opentripplanner.framework.io.HttpUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
The newest version!
package org.opentripplanner.framework.io;
import jakarta.ws.rs.core.HttpHeaders;
import jakarta.ws.rs.core.UriInfo;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import org.apache.hc.core5.http.ContentType;
public final class HttpUtils {
private HttpUtils() {}
public static final Object TEXT_PLAIN = ContentType.create("text/plain", StandardCharsets.UTF_8);
public static final String APPLICATION_X_PROTOBUF = "application/x-protobuf";
private static final String HEADER_X_FORWARDED_PROTO = "X-Forwarded-Proto";
private static final String HEADER_X_FORWARDED_HOST = "X-Forwarded-Host";
private static final String HEADER_HOST = "Host";
/**
* Get the canonical url of a request, either based on headers or the URI. See
* here
* for details
*/
public static String getBaseAddress(UriInfo uri, HttpHeaders headers) {
String protocol;
if (headers.getRequestHeader(HEADER_X_FORWARDED_PROTO) != null) {
protocol = headers.getRequestHeader(HEADER_X_FORWARDED_PROTO).getFirst();
} else {
protocol = uri.getRequestUri().getScheme();
}
String host;
if (headers.getRequestHeader(HEADER_X_FORWARDED_HOST) != null) {
host = extractHost(headers.getRequestHeader(HEADER_X_FORWARDED_HOST).getFirst());
} else if (headers.getRequestHeader(HEADER_HOST) != null) {
host = headers.getRequestHeader(HEADER_HOST).getFirst();
} else {
host = uri.getBaseUri().getHost() + ":" + uri.getBaseUri().getPort();
}
return protocol + "://" + host;
}
/**
* The X-Forwarded-Host header can contain a comma-separated list so we account for that.
* https://stackoverflow.com/questions/66042952/http-proxy-behavior-for-x-forwarded-host-header
*/
private static String extractHost(String xForwardedFor) {
return Arrays.stream(xForwardedFor.split(",")).map(String::strip).findFirst().get();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy